使用IBM的asynchbeans是否存在性能限制?
我的应用程序jvm核心转储显示了大量孤立线程的出现。Im当前使用本机jdk非托管线程。是否值得改为托管线程?在我看来,asynchbeans是在Websphere J2EE服务器内创建线程的一种变通方法。到目前为止,websphere允许您创建“工作”线程池,通过这种方式控制最大线程数,这是典型的J2EE可伸缩性问题
我在“非托管”线程上使用websphere内部的asynchbeans时遇到了一些问题(通过“非法”的setMessageLi
这段代码如何:
parfib :: Int -> Int
parfib 0 = 1
parfib 1 = 1
parfib n = nf2 `par` (nf1 `par` (nf1+nf2+1))
where nf1 = parfib (n-1)
nf2 = parfib (n-2)
比这更好的是:
parfib :: Int -> Int
parfib 0 = 1
parfib 1 = 1
parfib n = nf2 `
对于运行Linux2.6.x的多核计算机,当线程进行系统调用时会发生什么?它是否仅在线程运行的内核上放入内核,还是在所有内核上放入内核(如果这是新手问题,请抱歉)
一般来说,当接收中断时,这种行为(以正确的为准)是否相同?如果没有,区别是什么?只有执行系统调用的线程进入内核。Linux中的所有调度都是在线程粒度上完成的。至于中断-它们被路由到一个内核,即每个给定硬件事件只中断一个处理器。然后可以手动将中断分配给特定的核心。这是通过/proc/irq/irq-NUMBER/smp\u affini
我和TCL一起使用零食音频处理工具包。
我想切掉声音的一部分,把这一部分交给另一个线程来处理
我的问题是如何在TCL中的线程之间通过引用传递内容
proc a {} {
snack::sound snd
thread::send -async $Thread [list B snd]
}
set Thread [thead::create {
proc B{snd} {
... do something with snd
}
}
那是行不通
是否有任何公式,可能涉及RAM和CPU数量,可以让我大致了解在它开始变得低效和减慢PC速度之前,我可以生成多少线程
我想对另一台机器进行负载测试,所以我想尽快发送请求。但是如果它们只是互相妨碍,那么产生一百万个线程是没有意义的
编辑:线程正在进行远程过程调用(SOAP),因此将阻塞等待调用返回。首先,启动线程本身可能是一个相当慢的操作。当您启动线程堆栈时,必须分配空间,DLL中的入口点可能会被调用,等等。如果您有比可用内核多得多的线程,那么大多数线程在任何给定时刻都不会运行。也就是说,他们使用
标题可能不够清楚,因为我不知道如何定义我的问题
我知道Pthread是一个符合POSIX标准的线程库(关于POSIX,请参阅wikipedia:)。它在类似Unix的操作系统中可用
关于线程,我读到有三种不同的模型:
用户级线程:内核不知道它。用户自己创建/实现/销毁线程
内核级线程:内核直接支持进程中的多个控制线程
轻量级进程(LWP):由内核调度,但可以与用户线程绑定
你看到我的困惑了吗?当我调用pthread\u create()创建线程时,我是否创建了用户级线程?我想是的。那么我可以说,
我有一个这样的问题:
对某个系统的测量表明,在阻塞IO之前,平均进程运行一段时间T。进程切换需要时间S,这实际上是浪费的(开销)。对于具有quantum Q的循环调度,给出以下各项的CPU效率公式
( a ) Q = INFINITY
( b ) Q > T
( c ) S < Q < T
( d ) Q = S
( e ) Q -> 0
(a)Q=无穷大
(b)Q>T
(c)S最后得到[(t^ 2)/(q)] /[(t^ 2)//(q)+(s*((t/q))-(1/p
我正在自学操作系统。Tanenbaum在他的《现代操作系统》一书中陈述了一个例子,他解释了三个信号量(其中一个是互斥)如何协调生产者-消费者进程对。我很难掌握它。谁能解释一下这是如何实现的。任何帮助都将不胜感激。谢谢
#define N 1 00
typedef int semaphore;
semaphore mutex = 1 ;
semaphore empty = N;
semaphore full = 0;
void producer(vo
如果上下文句柄从main()传递给线程的函数,那么允许从main()创建egl上下文并从另一个线程渲染吗?是的,当然可以
首先,您需要在一个线程中创建上下文:
EGLint contextAttrs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
LOG_INFO("creating context");
if (!(m_Context = eglCreateContext(m_Display, m_Config, 0
我有一个Silverlight库项目,其中有一个大控件
我想在某个时间点将PC定时器的分辨率降低到5ms
我尝试使用NtQueryTimeResolution,但出现异常:
Attempt by security transparent method SetupTimer() to call native code through method
NtQueryTimerResolution(UInt32 ByRef, UInt32 ByRef, UInt32 ByRef) failed. Me
我编写了一个cuda内核,它使用共享内存执行缩减,以便在数组中找到最小值。这与此处的著名示例非常相似:
当我从单个CPU线程运行它时,它可以很好地处理每个块的任意数量的CUDA线程(最多可达我的设备的最大值:1024)
当我从一些(20)个CPU线程运行它时,每个块(256)有足够少的CUDA线程,它工作正常
但是一旦我增加了CUDA线程的数量和多CPU线程,一切都崩溃了
我尝试删除内核中执行缩减的行(因此在数组上只保留一些操作,但CUDA线程之间没有任何通信),并且它可以很好地处理任意数量的
我在Glassfish上部署了一个JRuby 1.6.7/Rails 3.2.11 web应用程序(前面没有web服务器)。我想让我的应用程序多线程
A建议我需要将max和min运行时设置为1,然后转到config/environment.rb并将其放入行中
config.threadsafe!
但是,它说(以及)我只需要在web.xml配置文件或命令行中设置运行时的最小和最大数量,它没有提到config.threadsafe!。(我觉得这个方法会占用大量内存,因为每个运行时都会加载一个完整的
我有一个运行TCP/IP服务器和客户端的C#WinForm。单击按钮时,TCP客户端被实例化以传输消息,然后关闭。服务器捕获消息,并将其显示在消息框中
问题:
我的WinForm好像被打断了。它并不总是响应我的单击(它实例化了客户端消息传输方法)。我想这是由于服务器线程?如果是这样,我可以做些什么来修复此中断。听起来您的网络正在UI线程中进行。这是一个大问题:UI线程旨在保持可用性以响应用户事件
您应该将网络放到一个单独的线程上,或者使用异步API。不要忘记,您只能从UI线程更新UI,因此您通常
我有一个文件服务器连接池。(缓存连接的文件服务器)
现在,如果池中有100个打开的连接,我想在一段时间后清理
我会在15分钟后进行清理(例如,在15分钟不活动后关闭20%的活动连接)
为此,我需要记住上次输入请求的时间戳。(作为静态变量)
这在多线程体系结构中可能吗?
如果两个写操作同时发生,则变量中的值可能已损坏
Net是否确保此写入操作是原子操作
s_lastUse = DateTime.Now;
它似乎是原子的:
CLI规范第I部分第12.6.6节规定:“当对某个位置的所有写访问大小
我正在玩WebSocketServlet(tomcat),我对如何在没有竞争条件问题的情况下正确地执行它有些疑问
我有一个实例变量(非线程安全),它将跟踪所有websocket连接
HashMap<String,MyServers> myNonThreadSafeVariable = HashMap<String,MyServers>
或者当一个客户在他的onOpen中连接时(不要担心这个)
有时,当我必须ping所有服务器的所有客户端时:
for (Entry<
你能解释一下MvvmCross多线程吗
对视图的ViewModel调用是无效的,因此必须没有任何冲突
然而,IMvxMessanger有SubscribeOnThreadPoolThread和SubscribeOnMainThread(除了Subscribe),我并不清楚何时使用它们
另外,ViewModel内部的多线程(例如,如果两个web请求同时被激活,并且在它们的结果上,每个请求都试图访问我的数据服务(例如,将数据写入数据库)),又是什么呢
(或者,从你的经历中,你知道还有其他一些这样的特
例如,一台机器有两个处理器,每个处理器有两个内核。我使用OpenMP编写了一个并行程序,并用3个线程运行它。硬件上发生了什么?我认为只有一个处理器会处理这个程序(是这样吗?),但我无法想象三个线程是如何分配到两个内核的。请帮忙。谢谢。在所谓的“答案”范围内回答您的问题几乎是不可能的-如果您想得到“真实”的答案,您需要仔细阅读针对特定机器体系结构的并行处理实现。简短的回答是“视情况而定”。但是您的程序可以在两个处理器上运行,在四个内核中的任何一个或所有内核上运行;这里要理解的关键是,您可以通过程序
我有下面的代码,但我得到ConcurrentModificationException,我应该如何避免这个问题?(出于某种原因,我不得不使用WeakHashMap)
WeakHashMap data=newweakhashmap();
//一些数据的初始化代码
for(字符串键:data.keySet()){
if(data.get(key)!=null&&data.get(key).equals(value)){
//做点什么来修改密钥
}
}
可能是因为您在迭代中执行的//操作实际上是在修
我正在做一个专门面向南美公众的流媒体网站项目。南美洲的流量非常昂贵,例如,Hostdime每传输4TB收取500美元。除了服务器的价格之外,仅使用100TB我就要支付12500美元
美国的服务器只能将250Kb/s~350Kb/s的数据传输到巴西。这还不足以流式播放高清视频,所以我想:
假设我在迈阿密有4台服务器。如果每台服务器都能以200Kb/s的速度流到巴西,如果我将4台服务器合并成一个流,我将获得800Kb/s,这对于流高清视频非常好
有可能这样做吗?这将为我们节省大量的金钱和时间。而且它
我一直在比较Scala相对于Java在并发编程方面的优势
显然,我提到的第一点是Scala是一种函数式编程语言(部分使用FP),它自然避免了副作用
与命令式语言相比,函数式编程中如何避免副作用,以及它如何在多线程/并发编程中工作?我认为,这句话的意思是,Scala作为一种函数式OO混合语言鼓励了(有时还启用了)您需要使用功能性结构和规则,这些结构和规则将产生无副作用。您可以很好地编写带有副作用的非函数状态Scala代码;-)另一方面,您可以尝试编写函数式Java(例如),但由于函数不是第一类对象
我有一个VB6应用程序,它执行一个长操作。比方说,保存到数据库需要1分钟以上
在保存过程中,我希望锁定(禁用)窗口并显示沙漏光标
但下一个代码不会这样做:
Private Sub Update_Click()
Screen.MousePointer = vbHourglass
Me.MousePointer = vbHourglass
Me.Enabled = False
'This takes more than minute:
Update
M
首先是定义:
uses
Windows;
type
TThreadParams = record
FParam1 : Integer;
FParam2 : array [0..511] of Byte;
end;
TFoo = class
private
FThreadHandle: THandle;
FThreadID : Cardinal;
FSomeParameters: TThreadParams;
functio
所以我们在操作系统上有一个JVM。在JVM中,正在运行Play(scala)应用程序。此应用程序使用Futures进行三次api调用:
object MyAwsomeController extends Controller {
val call1:Future[T] = scala.concurrent.future { ** call out across the wire to some awesome service ** }
val call2:Future[T] = sc
我正在尝试使用以下代码动态更改Windows控制台中的输出:
for(int i = 0;; i++,Thread.sleep(dur!("msecs")(200)))
write("\r",i);
但你要等很长时间才能在屏幕上看到一些东西。即使更改为1毫秒,持续时间也足以将数字重写速度降低到2-3秒
输出变化如下(大约为):
似乎write()函数的工作可以在进程中间中断
如果我们将write()更改为writeln(),sleep()函数将正常工作
为什么会发生这种情况?正在缓冲输
假设我有3种类型的线程:
//Thread_1:
lock(mutex)
while(t1_unexceptable_cond){
wait(t1_cv, mutex);
}
//TAKE RESOURCES
if(should_signal_T2){
signal(t2_cv, mutex)
} else {
signal(t1_cv, mutex)
}
unlock(mutex)
//DO THINGS WITH RESOURCES
lock(mutex)
//RET
此代码:
while (true) {
new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return null;
}
};
}
使JVM很快耗尽内存
为什么?我曾尝试在Windows 7上使用JRE 1.7.0_60 x86_64和默认选项运行此代码,结
假设我有两个线程T1和T1
线程T1将调用T1\u callback(),而T2正在调用T2\u callback()
案例
t1\u callback()。
在这段时间(t1-t2)之间,如果t2_回调被调用了10次
问题
那么当t1\u callback()释放互斥锁时,t2\u callback()将执行多少次。如果一个线程调用t2\u callback(),而另一个线程正在执行t1\u callback()并持有锁,它(运行t2\u callback()的线程)将挂起在pthread\u
不久前我在面试时问过这个问题,但我不确定答案
如果用100个线程计算c=c+1,是否需要锁?是的,在几乎所有支持并发的编程语言中都需要锁。是的。原因是语句c=c+1实际上是(关于)三个低级语句:
1. read c from the memory
2. increment c by one
3. store c back to the memory
如果两个线程执行(1),它们都会将c增加到相同的值并存储它。因此,c将只增加一次,而不是增加两次。我认为这取决于语言/内存模型是;但是您可以使用联
一个程序只能产生伪随机数,因为它总是确定性的。但是,由于调度/缓存/交换等因素的影响,使用多线程时会出现非确定性。
你能用这种效应产生真正的随机数吗?因为这不仅取决于确定性代码,还取决于物理现象,如延迟等。这一直在使用。如果您在许多类Unix系统上阅读/dev/random,可能会在熵中混入“环境”效应。但不要将其过度解读为“真正的随机数”。您所描述的效果仍然只在有限的范围内变化,在某些情况下可能在非常有限的范围内变化,因此它们非常接近确定性(如果您围绕RNG构建安全性,“关闭”通常就足够了)
这是我的GUI,
我想在这里做的是一起显示四个不同的视频。用户输入特定视频文件的路径并单击“打开”,应创建一个新线程来播放该视频
我有一个名为startThread()的插槽,以及一个名为openCamera()的线程中要调用的函数
在mainwindow.hpp中,它具有
public:
static void openCamera(const std::string& address, QLabel* label);
private slots:
void star
我有一个gradle任务在文件树上迭代,并对每个匹配的文件进行javaexec调用:
task runFeatures {
doLast {
fileTree(dir: 'src/test/resources/features', include:'**/*.feature').each { file ->
javaexec {
main = "cucumber.api.cli.Main"
GDB中是否有与WinDbg的等效的命令!进程0 7
我想提取一个转储文件中的所有线程以及它们在GDB中的回溯信息线程不输出堆栈跟踪。那么,有没有这样的命令
有这样的命令吗
通常,backtrace用于获取当前线程的堆栈,但是如果需要获取所有线程的堆栈跟踪,请使用以下命令
thread apply all bt
当使用多个线程进行调试时,切换到特定的线程号并仅获取该线程的回溯跟踪也很有用
从GNU GDB线程
出于调试目的,GDB将自己的线程号(按线程创建顺序分配的一个小整数)与程序中的每个线
我有一个Go web应用程序,它只需要在每个唯一ID的一个goroutine中执行给定的代码段。场景是,我有一些请求,这些请求带有代表某种事务的各种ID。对于给定的ID,这些操作的某个子集需要保证“一次只运行一个”(其他竞争请求应该阻止,直到前一个处理该ID的请求完成为止)
我可以想出一些方法来做到这一点,但簿记似乎很棘手——需要保持一个全局互斥锁来锁定对并发请求发生的映射的访问,然后在那里使用互斥锁或计数器,然后确保它没有死锁,然后垃圾收集(或仔细引用计数)旧请求条目。我可以这样做,但听起来容
线程上下文切换的成本/开销是多少?
据我所知,有直接成本:
保存和恢复上下文(通常,它包括
用途寄存器和程序计数器)
线程调度的成本(决定下一个运行哪个线程)
还有一些间接成本,例如:
如果一个被调出的线程被安排在以后的另一个CPU中运行,那么这可能会从主内存(或者实际上是通过一致性协议从其他CPU)重新加载变量,也就是说,可能会发生缓存读取未命中
还有其他间接成本吗?范围很大,假设在2000到15000个周期之间。谢谢@HansPassant。但是从定性的角度来看,成本如何?范围很大,假设在2
因为我的雇主不想使用编译过的软件,他们要求我创建一个GUI,使用PowerShell并行ping一系列设备。我的PowerShell脚本由一个窗体和窗体上用于ping设备的按钮组成。为了防止GUI锁定,我使用运行空间将ping卸载到单独的线程。我能够ping设备并使用运行空间中的信息更新表单,但是当我完成应用程序时,我无法关闭/处置运行空间,因此即使在应用程序退出后,它也会继续运行
下面提供的函数ping localhost 10次,并将结果添加到GUI中的ListView中
Function
我正在使用TThread.DoTerminate方法通知主线程TThread已终止。但只要尝试从DoTerminate内部更改某些控件(按钮)的属性,两个控件就会从窗体中消失
当我关闭表单时,我也会收到此消息
Project Test.exe引发异常类错误,并显示消息
'系统错误。代码:1400。无效的窗口句柄“”
这是一个复制问题的示例应用程序
type
TFooThread = class;
TFormSample = class(TForm)
Button1: TButt
SimpleDataFomat不是线程安全的,不建议在JEE中使用Synchronize。
如何处理这个问题
感谢如果您必须坚持使用SimpleDataFormatter类,请不要在成员变量中共享SimpleDataFormatter对象,而是在方法内部创建一个新对象,以确保安全。另一种方法是将其放在ThreadLocal中 一,。别这样。使用java.time api。2.只要在需要时创建一个SimpleDataFormat即可。您似乎认为所有的线程安全问题都是通过在这里和那里使用synchr
有没有办法用多个线程并行运行同一个类,比如
<suite name="myTestSuite" verbose="1">
<test name="myTest" parallel="classes" thread-count="5">
<classes>
<class name="myPackage.Test" />
</classes>
</test>
TL;DR:我有一个haskell项目,其中所有内容都在一个线程中,没有任何并发性,但崩溃如下:
program1: thread blocked indefinitely in an MVar operation
详细说明:
我试图在工作时找到bug,这取决于另一个库,timeless。您会注意到,所有并发代码都被注释掉了,对“无时间回购”进行grep将表明不涉及任何并发代码。然后我对这次崩溃完全感到困惑,我不知道如何获得更详细的信息,比如堆栈跟踪。我尝试使用一些RTS参数运行:
$ sta
为了将静态数据传输到GPU,我考虑使用一个staging VkMemory对象(ballpark 64MB),并将其用作循环队列。但是,我有多个线程生成内容(例如:渲染图示符、加载文件、过程),我希望它们能够完全自己上传数据(即写加提交Vulkan传输命令)
我打算至少在加载期间永久映射整个staging VkMemory(如果这是哑的,请这样说)(但如果我想流式传输数据,可能会更长)
为了实现上述目标,一旦线程的数据完全写入/刷新到staging,我希望它能够立即提交GPU传输命令
但是,这意
我想知道提取线程中的所有内容都发生了什么?在此图片中,存款和取款都会影响余额对象。我只是想确定一下,右边的东西是否被存储了,如果是的话,它何时/如何再次出现。我还想确定我的发音是正确的。。。在这种情况下,我是否创造了比赛条件
图片中显示的是操作的“执行顺序”。因此,假设您只有一个CPU,CPU首先从存款线程执行两个操作,切换到取款线程并执行4个操作,然后切换回存款线程并执行另外两个操作
这就是你在图片中的问题的答案:“这一切都是永远消失的,永远不会被使用吗?”:在你指出的空白区域所代表的时候,撤
我试图在线程中做一些线性代数。@Threads for循环,它返回一些奇怪的结果。在循环中,矩阵似乎没有正确地相乘。在线程for循环中执行是否安全
下面是生成NxN矩阵的TxR表的一个简单工作示例。对于每个R迭代,(t+1)次矩阵是(t)-th与另一个随机矩阵的乘积。乘法由不同的线程执行,然后由一个线程检查其正确性。函数应该返回一个零矩阵。它对N=4执行此操作
function testMM(T, R, N)
m1 = zeros(Int64, (T,R,N,N))
m2 = r
我正在尝试学习如何使用delphi并行库而不是TThread。我有许多任务要同时运行。每个任务的大部分时间都在等待某个事件,在等待过程中,我想将执行过程传递给另一个任务。
以下是我的示例代码:
type
TObj = class
pos: integer;
Done: boolean;
Constructor Create;
procedure DoWork(Sender: TObject);
end;
var
Objects : array [0..39
我在winterbe.com上看到了下面的例子,它演示了原子变量的使用
// From http://winterbe.com/posts/2015/05/22/java8-concurrency-tutorial-atomic-concurrent-map-examples/
public class Test_AtomicInteger {
public static void main(String[] args) {
AtomicInteger atomicInt = n
线程函数中的Java代码:
System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("--user-data-dir="+config.
我有一个压力测试问题,我想用Go中的简单同步来解决。到目前为止,我试图找到关于Go中同步的特定用例的文档,但没有找到任何合适的文档
具体来说:
我必须完成一个任务,在这个任务中,我必须在主例程中启动大量线程(在本例中仅用两个线程进行说明)。所有已启动的工作人员都应该以无序的方式自行准备一些初始化操作。直到它们到达一个小的命令序列,我希望所有goroutine一次执行这些命令,这就是为什么我希望goroutine彼此自同步的原因。对于我的任务来说,通过主例程(实例化所有其他goroutine)的延
考虑以下同时在多个线程上运行的算法:
for (i=0; i<10000; i++) {
z = rand(0,50000);
if (isset(cache[z])) results[z] = cache[z];
else {
result = z*100;
cache[z] = result;
results[z] = result;
}
用于(i=0;i没有人可能知道。不同的语言、编译器、CPU、平台和线程标准可以以完全不同的方式处理此
创建命名线程对我来说效果很好:
void inserter( int iTimes ) {
for ( int i = 0; i < iTimes; i++ )
DoOne();
}
int main( int nArg, const char* apszArg[] ) {
std::thread t1( inserter, 100 );
:
:
您的示例代码中唯一明确缺少的东西是编译它的std:::
问题不在于线程向量
但是,问题是线程函数
看看这个(伪)代码
这产生了一个竞赛条件,因为我发现了艰难的道路。因为在匿名方法获得调用MyThreadedProc的机会之前,TestASync已经完成,所以使用nil接口调用MyThreadedProc。(这比一些随机值要好得多)
Q1:对于简单的、非ref计数的变量(如整数、双精度等)也是如此吗?我强烈怀疑它们可能会被更改/返回随机值,因为它们位于堆栈上
Q2:我如何以简单、干净的方式解决这个问题
我一直在摆弄IOmniTask接口和其他方法来启动一个不受监控的后台线程,但所有这些似乎都会
在我所看到的merge-sort的多线程版本中,多线程通常是在左侧和右侧子数组的递归过程中完成的(即,每个线程都分配了自己的子数组来处理),合并操作是在每个线程完成各自的工作后由主线程完成的
我想知道是否有一种很好的方法可以对合并2个排序子数组的最终合并操作进行多线程处理?如果是这样的话,怎么做呢?实际上有一种方法可以将合并任务拆分为两个并发线程:
两个子阵列排序后
将任务分配给一个线程,以将已排序子数组的开头的元素合并到目标数组的前半部分,然后
为另一个线程分配一个不同但互补的任务:从已排序
1 2 3 4 5 6 ...
下一页 最后一页 共 318 页