c# - "thread safe"的真正含义......在实际中

标签 c# asp.net multithreading thread-safety ghostscript

请容忍我的新手问题..

我尝试使用 ghostscript、ASP.NET 和 C# 将 PDF 转换为 PNG。但是,我还读到 ghostscript 不是线程安全的。所以我的问题是:

  1. “ghostscript 不是线程安全的”实际上是什么意思?如果我在许多并发用户同时访问它的实时 ASP.NET(aspx) Web 应用程序中使用它会产生什么影响?

  2. 我还从另一个网站了解到 ghostscript 版本的主要功能。 8.63是多线程渲染。这是否意味着我们的线程安全问题现在已经解决了? ghostscript 线程现在安全吗?

  3. 我也在评估 PDFTron 的 PDF2Image,它应该是线程安全的。但是每个 CPU 的许可证并不便宜。是否值得为“线程安全”和“不安全”支付额外的费用?

最佳答案

很难提出一个每个人都同意的精确技术定义。

非正式地,“线程安全”只是意味着“在从多个线程调用时表现得相当好”。当从多个线程调用时,该对象不会崩溃或产生疯狂的结果。

如果您打算进行涉及特定对象的多线程编程,您实际需要回答的问题是“对象期望的线程模型是什么?”

有许多不同的线程模型。例如,“自由线程”模型是“从任何线程做任何你想做的事情;对象会处理它”。这是您最容易处理的模型,也是对象提供者最难提供的模型。

另一方面是“单线程”模型——所有对象的所有实例都必须从单个线程访问,句号。

中间还有一堆东西。 “公寓线程”模型是“您可以在两个不同的线程上创建两个实例,但是您用来创建实例的任何线程都是您必须始终用来调用该实例上的方法的线程”。

“租用线程”模型是“您可以在两个不同的线程上调用一个实例,但您有责任确保没有两个线程同时这样做”。

等等。在您尝试针对它编写线程代码之前,找出您的对象期望的线程模型。

关于c# - "thread safe"的真正含义......在实际中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412417/

相关文章:

c# - 使用 VisualBrush 作为 OpacityMask

mysql - 如果在关闭连接之前从未调用 transaction.Rollback/Commit 会发生什么?

java - 第二次加载时进度条失败

multithreading - Tomcat 6下Servlet中重启Apache2.4

c# - DataGridView 在通过单元测试调用时不接受 DataSource

大数的 C# linq Sum() 扩展

c# - 团结 : Omnisharp is not finding referenced projects in VSCode

asp.net - 何时在 ASP.NET 页面上自动调用 DataBind?

javascript - 移动 .aspx 文件时的 onclick 属性

Java:如何启动同一个对象的另一个线程?