池都是起到一个缓冲的作用,不需要从操作系统中重新申请。不需要每次都创建线程,每次用线程的时候,从线程池里面写出一个,避免创建与销毁。
资料来源于一下:
https://www.bilibili.com/video/BV1vk4y1R7Yi?from=search&seid=17897966025994815869
https://github.com/wangbojing/threadpool/blob/master/thread_pool_simple.c
线程池
线程池的应用
Io处理的时候
日志处理的时候
设计到池,有什么设计模式,单例模式
线程池的组成
1.执行队列,线程
2.任务队列,任务
3.管理组件
线程池代码
感觉最重要是一开始把结构给定义好,
typedef struct NWORKER {
pthread_t thread;
int terminate;
struct NWORKQUEUE *workqueue;
struct NWORKER *prev;
struct NWORKER *next;
} nWorker;
typedef struct NJOB {
void (*job_function)(struct NJOB *job);
void *user_data;
struct NJOB *prev;
struct NJOB *next;
} nJob;
typedef struct NWORKQUEUE {
struct NWORKER *workers;
struct NJOB *waiting_jobs;
pthread_mutex_t jobs_mtx;//关于条件变量的谈论 https://blog.csdn.net/shichao1470/article/details/89856443
pthread_cond_t jobs_cond;
} nWorkQueue;
typedef nWorkQueue nThreadPool;
内存池(和伙伴系统类似)
减少了系统调用,提高了应用程序性能 read,write,recv,connect,send。ZeroMQ做批量式得处理
怎么保证申请和释放内存得时候是线程安全的呢?tcmalloc不是通过加锁的方式。
最好的并发方式是不共享资源,如果需要共享,则通过通信解决。
zero_copy