我已经阅读了Kerrisk的The Linux Programming Interface: A Linux and UNIX System Programming Handbook,第31章关于线程的内容。该章节包括线程特定数据(31.3.4节)和线程本地存储(31.4节)。这些主题分别在663-669页进行了讲解。
线程特定数据(pthread_key_create、pthread_setspecific、pthread_getspecific等)看起来更加强大,但是使用起来似乎有些繁琐,并且似乎更频繁地使用内存管理器。
线程本地存储(静态和全局声明上的__thread)看起来稍微不那么强大,因为它受到编译时限制,但是使用起来似乎更容易,并且似乎在运行时避免了内存管理器的使用。
我可能对运行时内存管理器有所误解,因为在幕后可能有代码调用pthread_key_create,当它遇到__thread变量时。
Kerrisk没有对这两种策略进行比较/对比,并且他也没有在特定情况下推荐使用哪一种。
为了补充问题的背景:我正在评估一个第三方库。该库使用全局变量,不使用锁,并且我想在多线程程序中使用它。该程序使用线程来最小化网络延迟。
有绝对的赢家吗?还是有不同的情况需要使用其中之一?
线程特定数据(pthread_key_create、pthread_setspecific、pthread_getspecific等)看起来更加强大,但是使用起来似乎有些繁琐,并且似乎更频繁地使用内存管理器。
线程本地存储(静态和全局声明上的__thread)看起来稍微不那么强大,因为它受到编译时限制,但是使用起来似乎更容易,并且似乎在运行时避免了内存管理器的使用。
我可能对运行时内存管理器有所误解,因为在幕后可能有代码调用pthread_key_create,当它遇到__thread变量时。
Kerrisk没有对这两种策略进行比较/对比,并且他也没有在特定情况下推荐使用哪一种。
为了补充问题的背景:我正在评估一个第三方库。该库使用全局变量,不使用锁,并且我想在多线程程序中使用它。该程序使用线程来最小化网络延迟。
有绝对的赢家吗?还是有不同的情况需要使用其中之一?