P13 select 模型上
电脑承受进程数量 1核2GB 可以大约 100 多进程或线程 普通服务器大概是 10倍性能,即 1000 多进程或线程。 IO 多路复用能力 1个进程或线程可以使用多个 TCP。 单进程 select 可以 1024 单进程 poll 可以数千 单进程 epoll 可以百万 fdset 本质上是 int[32] 组成的 bitmap, 刚好对应 1024 个文件描述符。 参考 IO 多路复用 select 模型上
电脑承受进程数量 1核2GB 可以大约 100 多进程或线程 普通服务器大概是 10倍性能,即 1000 多进程或线程。 IO 多路复用能力 1个进程或线程可以使用多个 TCP。 单进程 select 可以 1024 单进程 poll 可以数千 单进程 epoll 可以百万 fdset 本质上是 int[32] 组成的 bitmap, 刚好对应 1024 个文件描述符。 参考 IO 多路复用 select 模型上
需求 需要在 linux 中配置好串口,并且通过串口收发数据 解决 打开串口 打开串口直接使用 open 函数即可,需要注意的是, flag 中的参数 O_NOCTTY, O_NDELAY. O_NOCTTY:告诉Unix这个程序不想成为“控制终端”控制的程序,不说明这个标志的话,任何输入都会影响你的程序。 O_NDELAY:告诉Unix这个程序不关心DCD信号线状态,即其他端口是否运行,不说明这个标志的话,该程序就会在DCD信号线为低电平时停止。但是在 man 中,是把 O_NDELAY 和 O_NONBLOCK 放在一起,并没有说明两者的区别,所以这这个参数的作用存疑。 open 时需要指定串口的串口号,比如 /dev/ttyS0 int OpenDevice(const char * dev) { int fd = 0; fd = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd < 0) { fprintf(stderr, "Can not open serial port %s", dev); return -1; } cout << "open " << dev << " Ok!" << endl; return fd; } if ((serial_fd = OpenDevice(kSerialName....