2015-08-22 刘太华
工厂类回收资源和夸线程回调时对象是否还存在判断 虽然大多数逻辑都在单线程里实现, 但是不能避免的是一些IO阻塞类型逻辑, 不得不放入子线程里执行,当IO完成后boost:bind(callback, arg1, arg2 ...) 放入主线程队列内执行callback, 但是问题是,假如callback指向的对象函数的对象, 已经销毁了, 这时候就无法判断对象是否还存在了,不判断就会core dump. 继续阅读 »
2015-05-06 刘太华
一个单线程的epoll server示例 这个示例是一个echo server, 将回显client端send的64字节. 代码在 echoEpollServer 在OSX下 gcc 4.6, linux 下编译可用, 默认被写死了监听8886端口. 继续阅读 »
2015-10-28 白若水
背景 在如今的大数据时代,多核 cpu 的发展,如何利用多核,提升计算能力,成为程序开发中一个很重要的话题。随之衍生了专为多核而生的语言,比如说 Golang 和 Erlang 。曾浮光掠影的看过 Golang 的多核编程,关于它的取得 cpu 核数,背后的概念而感叹。而 Csharp 作为一个一直走在时代前沿的语言,在 .NET 4.0 后引入了 System.Threading.Tasks 提供了对多核的支持。 继续阅读 »
2016-05-25 Li Shuai
也许你会偶然发现Python的多线程程序使用Ctrl-C杀不掉,必须拿到pid用kill -9才能干掉,研究这个问题的原因可以使得对Python多线程的信号处理及线程的退出机制有更好的理解。 假如有一个Python写成的用多线程模拟生产者-消费者的程序,代码如下: class Producer(threading.Thread): def run(self): global count while True: if cond.acquire(): if count > 1000: cond.wa 继续阅读 »
2016-04-28 Li Shuai
写Python多线程都知道当前线程调用a.join()后,会阻塞直到线程a运行结束,看了一下threading模块的源码, 了解了一下实现的原理。 每一个新开启的线程内部都维护着一个Condition类型的条件变量,对线程a进行join(),其实是wait()在线程a 内部的条件变量上,当线程a执行结束时,会通过notify_all()通知所有join()的线程,则阻塞的线程被唤醒,恢复执行。 以下是源码: self.__block = Condition(Lock()) #线程内部维护的Contition变量 def __stop(self): if not hasattr(self, '_Thread__block 继续阅读 »