Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic

1.1. ThreadLocal 设计模式1

1.2. 标准化现状 线程局部存储在不同的平台有不同的实现,可移植性不太好。1

1.3. Java与c#的ThreadLocal1

1.4. windowsTLS的4个 API: TlsAlloc、TlsGetValue、TlsSetValue 和 TlsFree1

1.5. Linux下支持两种方式定义和使用TLS变量,具体如下表:1

1.6. Php里面儿的tls2

1.1. ThreadLocal 设计模式

1.2. 标准化现状 线程局部存储在不同的平台有不同的实现,可移植性不太好。

线程局部存储在不同的平台有不同的实现,可移植性不太好。幸好要实现线程局部存储并不难,最简单的办法就是建立一个全局表,通过当前线程ID去查询相应的数据,因为各个线程的ID不同,查到的数据自然也不同了。大多数平台都提供了线程局部存储的方法,无需要我们自己去实现

1.3. Java与c#的ThreadLocal

1.4. windowsTLS的4个 API: TlsAlloc、TlsGetValue、TlsSetValue 和 TlsFree

1.5. Linux下支持两种方式定义和使用TLS变量,具体如下表:

定义方式

支持层次

访问方式

__thread关键字

语言层面

与全局变量完全一样

pthread_key_create函数

运行库层面

pthread_get_specific和pthread_set_specific对线程变量进行读写

应用语言支持的__thread关键字是最简单的,只须在定义变量时增加一个__thread关键字,后续对该变量的访问方式完全保持不变,所以这个是语言级别上的支持,属于隐式支持。_thread关键字是gcc对C语言的扩展,不是C语言标准定义的,当然Windows下的Visual Stdio也使用另一个关键字做扩展。

1.6. Php里面儿的tls

. Native TLS(Native Thread local storage,原生线程本地存储)

PHP在多线程模式下(例如,Web服务器Apache的woker和event模式,就是多线程),需要解决“线程安全”(TS,Thread Safe)的问题,因为线程是共享进程的内存空间的,所以每个线程本身需要通过某种方式,构建私有的空间来保存自己的私有数据,避免和其他线程相互污染。而PHP5采用的方式,就是维护一个全局大数组,为每一个线程分配一份独立的存储空间,线程通过各自拥有的key值来访问这个全局数据组。

而这个独有的key值在PHP5中需要传递给每一个需要用到全局变量的函数,PHP7认为这种传递的方式并不友好,并且存在一些问题。因而,尝试采用一个全局的线程特定变量来保存这个key值。

相关的Native TLS问题:

参考资料

_NET(C#):线程本地存储(Thread-Local Storage)之ThreadStatic, LocalDataStoreSlot和ThreadLocal - IT技术网.html

C#线程本地存储_LocalDataStoreSlot和ThreadLocal_T_.html

线程局部存储Thread Local Storage(TLS)-ylyxf-ChinaUnix博客.html

线程本地存储(Windows和Linux) - 缘起宇轩阁 - 博客频道 - CSDN.NET.html

PHP7革新与性能优化 - 战神悟空 - 博客园.html

线程局部存储(Thread Local Storage,TLS)_大坚坚坚_新浪博客.html

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )

汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

Atiend

最新文章

  1. 【微信小程序开发】之如何获取免费ssl证书【图文步骤】
  2. UVa2521
  3. 日期的js插件DatePicker
  4. Index on DB2 for z/OS: DB2 for z/OS 的索引
  5. hadoop Error: JAVA_HOME is not set and could not be found.
  6. spring注解和xml方式区别详解
  7. 转载:js动态获取图片长宽尺寸(兼容所有浏览器,速度极快)
  8. yii2 增加新的目录结构
  9. 使用qmake生成Makefile
  10. 根据wsdl文件用soapUi快速创建webService服务(有图有真相)
  11. net应用程序池自动关闭的解决方法
  12. 迅为IMX6开发板支持全网通4G模块丨GPS模块丨WIFI蓝牙丨千兆以太网
  13. Photoshop制作仿等高线着色图
  14. python3的C3算法
  15. Python上下文管理协议:__enter__和__exit__
  16. 在VMware Workstation上安装Ubuntu 16.04 Server操作系统
  17. 使用 python 自动打包 Android 和 iOS
  18. 1388:Lake Counting
  19. springmvc是如何和前端页面联系起来的
  20. C语言 · 9-1九宫格

热门文章

  1. 验证radio 是否被选中
  2. bzoj1179(Atm)
  3. command not found,系统很多命令都用不了 ,修改环境变量
  4. JDBC学习笔记(2)
  5. 62. Unique Paths && 63 Unique Paths II
  6. Python 学习---------Day3
  7. html 页面中显示单行省略号
  8. protobuf坑1
  9. vs2013的安装以及单元测试
  10. vb- ----之常用函数