博客
关于我
服务器编程的注意事项
阅读量:765 次
发布时间:2019-03-23

本文共 1272 字,大约阅读时间需要 4 分钟。

网络和系统编程是网络应用开发的基础,接下来,我会以技术人员的视角,逐步阐述相关的网络编程知识。

套接字选项是网络编程中配置套接字行为的工具。常见的套接字选项包括SO_REUSEADDR(防止服务器重启时被阻塞)、SO_REUSEPORT(允许多个套接字监听同一端口)、SO_KEEPALIVE(保持连接的"心跳")、以及TCP_NODELAY(取消Nagle算法对数据包的延迟合并)。

文件描述符的复制和管理需要谨慎处理。在fork系统调用之后,每个进程继承父进程的文件描述符 Phạm encountering việt.ektedir

在操作系统多线程环境中,信号的传递和处理需要特殊注意。由于信号机制本身是线程 unsafe,它可能导致在多线程环境中出现 race condition。因此,一个主线程通常需要专门处理所有信号,确保信号的牢靠传递。这也是在系统编程中常见的一些难点.

EPOLLONESHΟΤ是一个扩展事件循环接口中的配置选项。尽管使用ET(high-level spontaneous polling)模式下,一个文件描述符可能被触发多次,特别是在并发处理时容易出现 handler competition。在这种情况下,EPOLLONEHOT可以用于确保每个事件只会被触发一次。这需要在处理完成后,重新设置该文件描述符的EPOLLONEHOT状态,并根据不同的返回值(如recv=0表示对端关闭,recv>0表示有新的数据,recv<0并且错误代码为EAGAIN时表示连接已经关闭等)。

文件描述符的关闭操作需要谨慎使用。在普通的close调用中,只是减少引用计数。当进程通过"exec"替换自身时,需要确保已经不再需要使用该文件描述符。此外,在分叉后各个线程独立关闭自己的文件描述符也是必要的,因为close操作是浅拷贝。

时间轮和事件循环都是其中一个主 loop的核心机制。时间轮可以实现较为精准的定时,而事件循环则处理各种事件,如网络读写、信号处理等。

反应器和促进器是处理IO操作的异步机制。反应器使用同步IO,用户在注册完成时会进入阻塞等待事件的就绪状态;而促进器则采用异步IO,用户只需注册需要关注的事件,当事件发生时,内核自动执行相应的处理函数。

统一事件源是一个高效的事件处理机制。每个事件都与某个文件描述符相关联,无论是通过epollwait、pipe信号或定时任务,都可以通过统一的事件源进行处理。例如,可以在主线程注册一个管道作为信号源,将相关的信号信息写入管道主线程注册到event loop中处理。这与"一切皆是文件"的理念一致。

std::promise和std::future是C++标准库中用于异步编程的工具。std::promise相当于一个producer,负责将结果发送给消费者,而future相当于一个consumer。当future.get()被调用时,它会阻塞等待直到promise.set_value()被调用完成。这使得它们可以在并发执行中用于跨线程和跨时间的数据传递。

转载地址:http://wdjzk.baihongyu.com/

你可能感兴趣的文章
PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
查看>>
PostgreSQL 新增数据返回自增ID
查看>>
postgresql 更新多列数据
查看>>
PostgreSQL 服务启动后停止
查看>>
PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
查看>>
PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
查看>>
Qt开发——简易调色板QPalette
查看>>
PostgreSQL-解决连接时遇到的乱码问题
查看>>
PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
查看>>
PostgreSQL9.1 双机部署配置(主备数据同步)
查看>>
Qt开发——简易网络浏览器(一)
查看>>
Qt开发——简易成绩登记系统
查看>>
Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句
查看>>
Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
查看>>
SpringBoot中集成XXL-JOB分布式任务调度平台,轻量级、低侵入实现定时任务
查看>>
Postgresql中的表结构和数据同步/数据传输到Mysql
查看>>
Postgresql中自增主键序列的使用以及数据传输时提示:错误:关系“xxx_xx_xx_seq“不存在
查看>>
SpringBoot中集成websocket后WebSocketServer中注入mapper为空
查看>>
postgreSQL入门命令
查看>>
PostgreSQL删除数据库报"ERROR: There is 1 other session using the database."
查看>>