美文网首页
Thread Local Storage(TLS)笔记

Thread Local Storage(TLS)笔记

作者: Jiafu | 来源:发表于2018-07-16 14:17 被阅读0次

    TLS想要解决的问题

    1. 性能
    • 例如从TLS分配内存可以显著提高速度
    • 避免或者减少锁的竞争
    1. 正确性。例如errno的设置

    TLS的思想是以空间换时间,对于一个key,TLS为为每个线程保存一个独立的副本。
    TLS在实现时,其实可以不依赖语言的关键字,其实TLS就是把一个数据结构跟线程关联起来。在线程初始化的时候,初始化某些资源,在线程退出的时候,清理某些资源。当然这些跟线程相关的资源,是每个线程独享的,因此访问的时候不需要加任何的锁。每个线程在获取内存的时候,可以先从线程本地分配,如果分配不到,再去公共的资源池中获取资源,放到线程本地。

    TLS的本质就是挺简单的,看很多文章好像把这个东西复杂化了,一提TLS就好像是在说C++、Java的关键字,仿佛这东西必须由语言关键字支持似的,其实并不是。了解TLS之后,使用C语言也能自己搞一个TLS的库出来。

    TLS通常来说,需要配合线程库一起来实现。在创建线程的时候,同时也预分配一部分内存给线程,作为线程独享的内存块。

    所以TLS本质上就是线程独享的一块内存。理解了这个本质之后,剩下的就是实现上的细节了。

    TLS的最基本的使用,可以查阅一下pthread_key_create、pthread_setspecific、pthread_getspecific、pthread_key_delete这一系列的API来完成TLS的key的创建、设置、获取、删除功能。

    相关文章

      网友评论

          本文标题:Thread Local Storage(TLS)笔记

          本文链接:https://www.haomeiwen.com/subject/ggcbpftx.html