当前位置: 首页 > 面试题库 >

跨线程具有一致静态变量的C#(单声道)Linux Web服务器托管

龙俊美
2023-03-14
问题内容

有人知道C#(单机)Linux Web服务器托管配置可在线程之间启用一致的静态变量(即每个线程实例的CGI模型)吗?

细节

我有一些c#(单声道)代码,作为简单的Web应用程序的一部分,我们需要在Linux上托管这些代码。我们不需要任何传统的asp甚至asp.net
mvc功能,实际上我们只需要能够基于共享的静态变量以动态内容响应特定的url。

静态变量: 我们要做的一项特殊要求是,我们需要静态变量来在所有传入请求中保留其值(与使用ASP.net
mvc应用程序在Windows上执行的方法相同)。托管诸如Apache mod_mono之类的mono
c#Web应用程序的常见方法似乎是使用“每个线程c#应用程序实例”模型,其中我们的c#应用程序将有多个独立实例,每个实例都有自己的静态变量。这是我们需要避免的问题。我需要一种托管ac#应用程序的方式,该方法为一个通用应用程序提供了一组共享的静态变量,所有传入请求都将看到这些变量。如果应用程序回收时可以重置静态变量(就像在普通的IIS
/ MVC中一样),只要不经常回收,就可以了。

背景是此Web应用程序需要在静态变量中的RAM中保存大量数据,并快速回答有关该数据的问题。为每个线程打开应用程序副本会限制RAM资源太多,而频繁地将数据重新加载到内存中会使应用程序速度太慢(可以使用IIS
/ Asp.net MVC之类的偶尔回收)。该系统工作得非常好在Windows / IIS7(每秒50,000动态请求),我们
希望改变这种结构,所以我在寻找答案涉及到托管不改变应用程序的设计。


问题答案:

mod_mono不会为每个新的Web请求生成一个新的Mono进程。如果将fastcgi服务器与apache或nginx一起使用,也不会这样做。

编辑:静态变量在同一应用程序域内共享。对于Microsoft .NET IIS和Mono(无论您使用的是mod_mono,xsp还是mono-
fastcgi-
server),这都是正确的。即使apache产生了多个工作线程,并且单个请求由一个工作线程处理,但在任何给定时间都只有一个单进程运行(除非您已配置多个asp.net应用程序,否则每个应用程序都有一个)

Mono也尝试实现与ASP.NET的100%兼容性,因此设计上没有不同的行为!

Linux上程序的不同行为很可能与mod_mono处理请求的方式无关,而是与Mono本身或您的代码中的错误有关(即,通过在Linux上不成立平台假设)。您应该真正使用MonoDevelop
/ xsp进行调试,并尝试更清楚地指出问题所在,或在此处粘贴一些示例代码。



 类似资料:
  • 问题内容: 在 多线程中 。我认为这是因为。这是唯一原因吗? 我知道。但为什么? 问题答案: 在多线程中,static没有意义。 恐怕你在做相反的陈述 。静态变量是一种共享资源,可用于在不同线程之间交换某些信息。而且,在访问这种共享资源时我们需要小心。因此,我们需要确保在多线程环境中对静态变量的访问是同步的。 每个线程都有自己的堆栈 这是正确的说法。堆栈仅保存局部变量,而不保存堆中的变量。静态变量

  • 问题内容: 类的静态成员是否在每个进程或线程中仅作为单个实例存在?意思是每个线程都具有自己的类的静态成员变量副本吗? 我的猜测是每个过程,对吗? 问题答案: 静态 字段 为每个类加载器提供一个值。 如果需要每个线程的值,请设置static 。

  • 我的问题与静态变量的线程安全有关。 如果两个线程,t1具有静态锁,t2具有对象锁,可以同时继续,那么A类的状态测试将如何是线程安全的呢? 可能是,我错过了一些非常基本的东西,但不确定它是如何工作的。 根据下面的答案,我得到的印象是,如果必须使这些状态成为线程安全的,那么两个锁都应该由正在更新此状态的线程持有,或者确保它被仅静态方法或仅非静态方法访问。对吧?

  • 本文向大家介绍C++之类的静态变量,包括了C++之类的静态变量的使用技巧和注意事项,需要的朋友参考一下 成员变量 通过对象名能够访问public成员变量 每个对象都可以有只属于自己的成员变量 成员变量不能在对象之间共享 类的静态成员 静态成员变量 存储在 全局数据区 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 如何从多个线程同时访问静态变量。 如果我有这样的课 我需要访问线程1的值,比如 从线程2中,我需要设置如下值 这会导致内存冲突吗?。如果是,建议使用什么方法来处理这种情况?。

  • 主要内容:几点说明 对象的内存中包含了成员变量,不同的对象占用不同的内存(已在《 C++对象的内存模型》中提到),这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响。例如有两个相同类型的对象 a、b,它们都有一个成员变量 m_name,那么修改 a.m_name 的值不会影响 b.m_name 的值。 可是有时候我们希望在多个对象之间共享数据,对象 a 改变了某份数据后对象 b 可以检测到。共享数据的典型使