![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux cmd
spch2008
github.com/spch2008
展开
-
一场Socket四次握手引发的血案
一场Socket四次握手引发的血案前奏Hello Everybody,原谅我是一个标题党。事情是这样的,周末,同事在微信上抛来一个问题,原文如下:服务端某个服务timewait过多,网上说端口会耗尽,我怎么感觉是fd会耗尽呢,因为一个服务通常只使用一个端口在记忆的某个角落里,翻出了四次握手的状态图,虽然模模糊糊,但是还是有点印象。原创 2016-07-28 19:56:37 · 3017 阅读 · 4 评论 -
自己动手写线程池之线程
线程封装pthread_t tid;pthread_create(&tid, NULL, callback, NULL);最原始的线程创建方式,线程通过回调函数callback来实现不同的功能。这种方式不仅使得线程创建函数散落在代码的各个地方,而且通过函数功能来区分线程有违面向对象概念。接下来,通过面向对象思想将线程进行封装,用户只需要继承线程基类,实现回调函数,即可完成自定义原创 2016-07-08 10:05:31 · 1318 阅读 · 0 评论 -
自己动手写线程池之异常
C语言中,通过函数返回值来获知此次操作的结果。在实现线程池时,采用异常机制。同时,为了能够精确区分抛出异常的类以及对异常的精确处理,在每个类中,都实现一个针对该类定制的异常类。异常基类class Exception : public exception{public: explicit Exception(const string &text); Exception原创 2016-07-08 13:15:44 · 446 阅读 · 0 评论 -
自己动手写线程池之锁的管理
锁的裸用pthread_mutex_t mutex;pthread_mutex_init(&mutex, &mutex_attr);pthread_cond_t cond;pthread_cond_init(&cond, &cond_attr)//////////////////////////////////////////////pthread_mutex_lock(&mutex)原创 2016-07-09 16:43:08 · 882 阅读 · 0 评论 -
自己动手写线程池之线程池实现
线程池工作流终于来到这了,前面做了若干准备工作,都是为了构建线程池。仿照NGINX线程池模型,绘制了线程池工作流程,如下图所示:任务定义任务基类Task,所有用户自定义Task都要继承该类,实现Exec方法。线程从任务队列中获取Task,执行Exec。class Task{public: virtual void Exec()原创 2016-07-09 16:45:24 · 733 阅读 · 0 评论 -
自己动手写线程池之锁的优化
问题描述线程池将任务Task添加到工作队列中,该队列使用STL List实现。每次添加任务的时候,都需要获取线程锁,然后操作队列。template typename Item>void ThreadQueue::Push(const Item &item){ { ThreadLocker::Locker lock(&_locker); _q原创 2016-07-09 16:46:57 · 882 阅读 · 0 评论