随笔分类 - 进程/线程
摘要:ET模式下,需要循环从缓存中读取,直到返回EAGAIN没有数据可读后,一个被通知的事件才算结束。如果还读取过程中,同一个连接又有新的事件到来,触发其他线程处理同一个socket,就乱了。EPOLL_ONESHOT就是用来避免这种情况发生的。将事件设置为EPOLL_ONESHOT后,每次事件触发后就会
阅读全文
摘要:https://www.cnblogs.com/yuuyuu/p/5103744.html 这篇文章已经写的很清楚了,暂时不展开论述了。 http://blog.csdn.net/weiyuefei/article/details/52242867
阅读全文
摘要:epoll项目中用了几次,但是对于其原理只是一知半解。我希望通过几篇blog能加深对她的理解。 我认为epoll是同步IO,因为他在调用epoll_wait时,内核在有I/O就绪前是阻塞的,虽然可以将timeout设置为0,此时就是非阻塞的了。但这不是变成忙轮询了么? select和epoll的比较
阅读全文
摘要:条件变量(二)这边文章主要纠结了pthread_cond_wait(&cond,&mutex)函数以及为何判断条件时要用while而不是if。 本文还想弄清楚另外两个关于pthread_cond_signal(&cond)的问题: 1、先改变条件值还是先调用pthread_cond_signal?
阅读全文
摘要:条件变量是用来等待某个条件是否成立的等待原语。主要有两个函数: 1、 pthread_cond_signal(&cond) :用来发送信号,唤醒正在wait()ing的线程。要搞清楚这里所谓唤醒,要知道其实线程中有两个队列cond_wait和mutex_lock。signal的唤醒只是将cond_w
阅读全文
摘要:互斥器mutex用来排他性的访问共享数据,他不是等待原语。若要等待某个条件成立,我们应该使用条件变量(condition variable)。条件变量顾名思义就是一个或多个线程等待某个布尔表达式为真,即等待别的线程唤醒它。 条件变量只有一种使用方式,wait端: 1、必须与Mutex一起使用,以保护
阅读全文
摘要:POSIX线程函数一共有110多个,常用的不过十几个。贵精不贵多。这11个最基本的Pthread函数是: 2个:线程的创建和等待结束(join)。 4个:mutex的创建、销毁、加锁、解锁。 5个:条件变量的创建、销毁、等待、通知、广播。 用这三类东西(thread、mutex、condition)
阅读全文
摘要:一、定义 教科书式回答,进程是资源分配的最小单位,而线程是CPU调度的最小单位。 进程有自己的独立地址空间(虚拟的,4G大小),一个进程崩溃后不会对其他进程产生影响。同一进程内的某一个线程崩溃后,整个进程也崩溃了。因为线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间。 多进程比多线程程序要健
阅读全文
摘要:困惑 首先,我知道select是IO复用。以UDP为例,select流程大体如下: 但是网上很多人都说这个框架使得服务端实现了并发。我很好奇的是,这个并发是怎么实现的? 因为select返回大于0后,开始检查read_fds,看是哪些FD已经可读。比如fd1和fd5可读了,我肯定先处理fd1的数据,
阅读全文
摘要:同一进程中的不同线程间共享进程的全局变量、文件描述符。 线程或进程的同步方式:信号量和互斥量 临界区 线程/进程可以访问共享资源,但是有些资源同一时间只能一个线程访问,这种资源称为临界资源,如打印机等。此外,还有许多变量、数据等都可以被若干进程共享,也属于临界资源。访问临界资源必须互斥的进行,访问临
阅读全文
摘要:问上述程序会打印出多少个"-",我当时认为是6个啊,这还用问?嗨。原来fork调用的时候已经把printf中的"-"放在缓存区中了,而且没有flush,即没有刷新缓冲区。所以父子进程各复制了一份"-",所以答案是8个。 下面这段代码: 执行./a.out,输出如下 a write to stdout
阅读全文
摘要:概念 内核一旦发现进程指定的一个或者多个I/O条件就绪(也就是说输入已准备好被读取,或者描述符已能承受更多的输出),它就通知进程。这个能力称为I/O复用(I/O multiplexing)。 使用场景 当处理多个多个文件描述符或者监听多个socket时,必须使用I/O复用。 如果一个服务器要同时处理
阅读全文

浙公网安备 33010602011771号