问题标签 [thread-local-storage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 使用线程本地存储的内存泄漏?
几天后,我们的网站明显出现了内存泄漏(> 2Gb /pool)。所以,我在 windbg 上运行了一些命令,终于发现了一些东西:有很多System.LocalDataStoreElement
. 在源代码中快速搜索(见下文)后,我发现了一个非常奇怪的类:
所以,我的问题:
- 在这里使用 Thread.AllocateDataSlot 显然没用,但它可以解释内存泄漏吗?因为经过完整的负载测试(超过 400 000 个请求),我无法重现泄漏。
- 将 TLS/ThreaStatic 用于 Web 应用程序是否相关?因为在 asp.net 中,我们不控制线程寿命,因为工作线程将执行许多请求。
我还在此处的 MS KB 中发现了一个问题。
总之,一切似乎都在这段代码上,但我无法重现这个问题。
c++ - Windows 的线程本地存储是否初始化值?
我在 MSDN 中发现了关于线程本地存储的初始值的矛盾。 这个页面说:
创建线程时,系统会为 TLS 分配一个 LPVOID 值数组,这些值初始化为 NULL。
这让我相信,如果我从一个从未为同一索引调用过 TlsSetValue 的线程中使用有效索引调用 TlsGetValue,那么我应该得到一个空指针。
但是,此页面说:
程序员有责任确保……线程在调用 TlsGetValue 之前调用 TlsSetValue。
这表明您不能依赖从 TlsGetValue 返回的值,除非您确定它已使用 TlsSetValue 显式初始化。
然而,第二页同时通过以下内容强化了初始化为空的行为:
存储在 TLS 槽中的数据可以具有值 0,因为它仍然具有其初始值,或者因为线程调用 TlsSetValue 函数时使用 0。
所以我有两条语句说数据被初始化为 null(或 0),还有一条语句说我必须在读取值之前显式初始化它。实验上,这些值似乎确实被自动初始化为空指针,但我无法知道我是否只是幸运,以及是否总是如此。
我试图避免使用 DLL 来分配 DLL_THREAD_ATTACH。我想按照以下方式进行惰性分配:
这是一种可靠且安全的模式吗?或者我是否必须在尝试读取之前明确初始化每个线程中的插槽?
更新:文档还说TlsAlloc 将已分配索引的插槽归零。因此,程序的另一部分以前是否使用过插槽似乎无关紧要。
java - tomcat 的 ThreadLocalLeakPreventionListener 究竟是做什么的?
文档org.apache.catalina.core.ThreadLocalLeakPreventionListener
说
A在停止
LifecycleListener
时触发 Executor 池中的线程更新,Context
以避免与线程本地相关的内存泄漏。
它如何准确地防止ThreadLocal
内存泄漏?上下文停止时是否显式调用ThreadLocal
'方法?remove()
据我所知,ThreadLocal
是作为哈希映射实现的。映射键是对ThreadLocal
实例本身的引用。映射值是线程本地值。
c++ - 线程局部指针初始化
在阅读下面链接的 Niklas Frykholm 的非常好的博客文章时,我遇到了一些我无法完全理解的东西。
http://bitsquid.blogspot.nl/2012/01/sensible-error-handling-part-1.html
这段代码让我很困惑:
该代码定义了一个指向字符串数组的线程本地指针,该数组用作简单的堆栈。我不太明白的是如何以跨平台的方式初始化和销毁数组?此外,这如何与 dll 边界一起工作?
c# - 反复调用 CurrentThread.ManagedThreadId 或将值存储在线程本地存储中?
有没有人有任何见解的实施
就像它是否在进行内核往返一样?我特别想知道从多个线程重复调用它是否比读取一次值更好,将其存储在线程本地存储中,然后使用该值,例如
我今天要测量这两种变体,但我认为事先听到任何想法(或偏见:))会很有趣。
c# - 将数据存储在 Thread Local Storage / HttpContext Current Items
将数据存储在 Thread-Local Storage 中,或者HttpContext.Current.Items
,哪个更有效......?
这是用于在 Web 应用程序中存储主数据/参数。
在这两种方法中放置数据的代码是:
1. System.Web.HttpContext.Current.Items
2.TLS
谢谢....
singleton - Pthread Thread-Local-Singleton,何时释放 TLS Key?
我使用 pthread TLS 实现了一种“线程本地单例”,我想知道在这种情况下我如何(以及何时)可以删除 pthread_key_t,因为就像现在一样,TLS 密钥使用的内存永远不会空闲' d。
其预期用途是让类 A 从 ThreadLocalSingleton<A> 派生,这使 A 成为线程本地单例,假设 A 只有私有构造函数并且 ThreadLocalSingleton<A> 是 A 的朋友。
哦,还有 - 你看到那个实现有什么问题吗?我忽略了什么重要的事情吗?
windows-phone-8 - 替代 tlsAlloc tlsGetValue 和 tlsSetValue
TLS funcs 是否有任何可能的替代方案。
我正在尝试从 Windows 桌面移植到 Windows Phone 8。
spring - 会话超时时的 ThreadLocal 行为
我正在开发一个基于 Java 的网络应用程序,我们使用 ThreadLocal 来跟踪当前登录的用户。现在,通常它工作得很好。但是,每当会话超时,并且系统尝试访问该变量(从 ThreadLocal 数据),它会给出随机值(一些其他登录用户的值)。理想情况下,它应该返回一个空值。我对这里发生的事情感到困惑。
c++11 - 使用thread_local时gcc 4.8.1中的内存泄漏?
Valgrind 在以下代码中报告泄漏的块,显然每个线程一个:
编译器版本:
GCC 构建选项:
程序编译选项:
valgrind 版本:
Valgrind 选项:
valgrind 输出的尾部:
构造函数和析构函数为每个线程运行一次:
笔记:
- 如果更改创建的线程数,则泄漏块数与线程数匹配。
- 如果 GCC 是这样实现的,那么代码的结构可能允许资源重用(即泄露的块)。
- 从 valgrind 堆栈跟踪中,thread_local.cc:34 是以下行:
thread_local Foo foo;
- 由于 sleep_for() 调用,程序运行大约需要 10 秒左右。
知道这个内存泄漏是在 GCC 中,是我的配置选项的结果,还是我的程序中的一些错误?