• 并发设计模式:Actor-based与Task-based

    前面一段时间,瞄了一下《七周七并发模型》。感叹还是有很多语言不会,导致有的章节现在还没法看。但是,Actor并发模型还是给我留下了比较深的印象,因为它适合应用于分布式架构,而且具有很好的容错性。和Actor-based相对应的模型就是Task-based。

    Actor-based与Task-based的含义

    Actor-based和Task-based的含义要从”计算“的内涵说起,”计算“包含两个要素:

    • 用来进行工作的线程
    • 进行工作所需的信息

    因为,线程主动地对信息进行计算处理,所以我们把线程作为计算的“主体”,把信息作为计算的“客体”。对应到并发模型中,Actor-based模型注重主体,而Task-based注重客体。

    Task-based模式的思想与实现

    在Task-based模式中,工作线程之间通过对”客体“的同步操作,并发地完成计算任务。常见的情况下,各个线程引用同一个信息客体,而且… 【查看更多】

  • 多线程程序之线程私有数据

    在C/C++的多线程程序中,所有的线程共享相同的地址空间。所以数据段和进程堆的数据,都可以被所有线程读写。在极端情况下,线程的栈空间也可以被共享。只有线程的寄存器上下文算是真正私有的。对于某些变量,我们希望它在不同的线程中具有不同的值,这就是线程私有数据的用途。

    对于普通的全局变量,或者通过指针或引用实现的共享,其实在内存中只存在一个备份。而进程私有数据则相当于一种Map型的变量,根据线程的id,线程私有变量对应于不同的值。

    /*
     * tsd_once.c
     *
     * Demonstrate use of pthread_once to initialize something
     * exactly once within a multithreaded program.
     *
     * Note that it is often easier to use a statically initialized
     * mutex to accomplish 
    【查看更多】