数据类型
首先看下数据类型的分类,根据是单线程还是多线程,可以分为以下几类123全局数据局部数据线程特定数据(TSD)
全局数据和局部数据比较好理解,但是线程特定数据是什么?独立于线程的数据,也就是说只有某个线程可以访问,其它线程不可以访问,实现某个线程内,函数调用之间的共享,也就是线程全局数据
POSIX系统
KEY数据结构数组(至少128个TSD)
KEY数组 | |
---|---|
标志0 | |
析构函数指针0 | —– > 线程0 pthread_key_t |
标志1 | |
析构函数指针1 | —– > 线程1 pthread_key_t |
标志2 | |
析构函数指针2 | —– > 线程2 pthread_key_t |
…………. | |
标志127 | |
析构函数指针127 | —– > 线程127 pthread_key_t |
|
|
每一个TSD由标志字段和析构函数指针组成
进程数据结构
Pthread结构 |
---|
指针null |
指针null |
指针null |
…………. |
指针null |
其中KEY数组中已分配的key的标志字段,都会跟Pthread结构相关联,而Pthread中存放指向实际数据的指针,也就是说进程维护KEY结构数组,而线程维护Pthread结构数组
函数
|
|
PHP中的多线程
|
|
由此可见,tsrm_tls(Thread local storage)对象,实现的只是将普通变量,转换成TSD的处理!
PHP中的相关的宏和函数
|
|