博客
关于我
服务器编程的注意事项
阅读量: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中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>