博客
关于我
服务器编程的注意事项
阅读量: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/

你可能感兴趣的文章
MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
查看>>
MySQL - ERROR 1406
查看>>
mysql - 视图
查看>>
MySQL - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql -存储过程
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>