linux
文章平均质量分 85
linuxcprimerapue
这个作者很懒,什么都没留下…
展开
-
C++实现基于IO复用模型的echo服务器
IO复用,即IO multiplexing,是使用select/poll/epoll这一系列的多路选择器,可使进程或线程能够处理多个连接;实质上不是复用IO,而是多个IO复用进程或线程; 编程模型 (1)单进程IO复用服务器,它适合IO密集型的应用,不适合计算密集性的应用,因为计算需要耗费CPU资源,使得其他IO连接无法得到服务;网络延迟也可能会大一些,本来进行一次read系统调用可以原创 2015-08-09 17:32:33 · 1181 阅读 · 0 评论 -
C++实现基于单线程单客户模型的echo程序
一个客户一个子线程,也是阻塞式网络编程,它的初始化要比一个客户一个进程模型开销要小;但是仍适合于长连接,不适合短连接、并发数不大的情况,尤其不适合pthread_create()的开销大于本身服务的情况; 编程模型 (1)并发服务器1,类似于一个客户一个进程的并发服务器1,它通常阻塞在accept,阻塞返回后派生一个子线程来处理每个客户端,每一个客户一个线程,创建线程的开销比f原创 2015-08-08 23:02:05 · 720 阅读 · 0 评论 -
c++实现基于单进程单客户编程模型的echo程序
一个客户一个子进程,是阻塞式网络编程,适合于长连接,不适合短连接、并发数不大的情况,尤其不适合fork()的开销大于本身服务的情况. 编程模型 (1)迭代服务器,TCP迭代服务器总是完全处理完某个客户的请求之后才会转向为下一个客户服务,因此对下一个用户的响应时间不够好,比较适合短连接服务(一般会有一方主动断开TCP连接);如果在单核处理器上,由于其没有进程控制的时间,可以使用该程序原创 2015-08-03 20:02:15 · 771 阅读 · 0 评论 -
c++封装线程池
线程池 ThreadPool声明 class Thread; class ThreadPool final { public: ThreadPool(const ThreadPool&) = delete; ThreadPool& operator=(const ThreadPool&) = delete; explicit ThreadPool原创 2015-08-05 21:15:26 · 539 阅读 · 0 评论 -
C++封装互斥量和条件变量
互斥量 (1)互斥量是保护临界区的另一种方法,当执行线程在临界区的执行时间很长时,那么就最好使用互斥量了,否则会造成其他的线程将会在临界区外忙等,浪费CPU时间;此时其他线程发现临界区已经被互斥量锁住,那么它们将会阻塞;当互斥量被释放时,有多个线程在阻塞,多个线程均会被唤醒,但是只有一个线程可以获得该锁,其他的线程将会继续阻塞; (2)当执行线程需要在临界区睡眠时,那么就最好使用互斥量原创 2015-08-04 19:46:46 · 1205 阅读 · 0 评论 -
c++封装线程
线程库类型 Linux线程库有两个流行的线程库,分别是LinuxThreads和NPTL,由于LinuxThreads的某些缺点,已经被NPTL取代,它们都是基于1:1模式实现,即1个用户线程被映射为1个内核线程;故每一个用户线程在内核中有唯一的标识; 线程标识 使用pthread_t存在问题 void* loop(void*) {原创 2015-07-29 17:17:07 · 666 阅读 · 0 评论