基于TCP/IP协议的通信编程一般有下面三种方法:
第一种是单线程阻塞, 由于是阻塞方式读取, DNS解析, 建立连接, 写入请求, 读取结果这些步骤上都会产生时间的延迟;
第二种方式是多线程阻塞, 建立多个阻塞的线程, 分别请求不同的URL. 可以更有效的利用机器资源, 特别是网络资源, 因为无数线程在同时工作, 所以网络会比较充分的利用. 第三种是单线程非阻塞. 是目前使用的比较多的一种做法. 在一个线程内打开多个非阻塞的socket套接字连接, 通过poll/epoll/select对连接状态进行判断, 在第一时间响应请求, 不但充分利用了网络资源, 同时也将本机cpu资源的消耗降至最低. 此方法需要对DNS请求, 连接, 读写操作都采用异步非阻塞操作.
larbin采用的是第三种方法实现的高效性, 采用批量创建非阻塞套接字socket进行连接, 根据poll函数判断套接字上的事件异步读写socket上的内容, 从而充分利用了网络资源, 也将cpu资源的消耗降到了最低.