池
池是一组资源的集合,这组资源在服务器启动之初就被完全创建好并初始化,者称为静态资源分配。
当服务器进入正式运行阶段,即开始处理客户请求的时候,如果需要相关资源,就可以直接从池中获取,无需动态分配
池就是服务器管理系统资源的应用层设施,它避免了服务器对内核的频繁访问
池:进程池、线程池、内存池、连接池
进程池是由服务器预先创建的一组子进程,进程池中的线程数量应该和CPU数量差不多
进程池中的所有子进程都运行着相同的代码,并具有相同的属性(优先级等)
进程池在服务器启动之初就创建好了,所以每个子进程都相对“干净”,即它们没有打开不必要的文件描述符(从父进程继承而来)
当有新的任务到来时,主进程通过某种方式选择一个已经存在的子进程(通过某种算法选择或者通过一个共享的工作队列来同步),
选择好子进程后,主进程还需要告诉目标子进程有新任务需要处理,并传递必要数据(管道)
EPOLLONESHOT
EPOLL的EPOLLONESHOT事件,使一个socket连接任何时刻都只被一个线程所处理
对于注册了EPOLLONESHOT事件的socket,操作系统最多触发其上注册的一个可读、可写、或者异常事件,且只触发一次,
这样,当一个线程在处理某个socket时,其他线程是不可能有机会操作该socket的,但反过来,注册了EPOLLONESHOT事件
的socket一旦被某个线程处理完毕,该线程就应该立即重置这个socket上的EPOLLONESHOT事件,以确保这个socket下一次可读,
其EPOLLIN事件能被触发,其他工作线程有机会继续处理这个socket
由此看来,尽管一个socket在不同时刻可能被不同的线程处理,但同一时刻肯定只有一个线程再为它服务,这就保证了连接的完整性,
从而避免了很多可能的竞态条件
《完》
转载于:https://blog.51cto.com/lingdandan/1836326
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108913.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...