在.NET中很难find对worker和I / O线程的详细而简单的描述 关于这个话题,我很清楚(但在技术上可能并不精确): 工作者线程是应该为他们的工作使用CPU的线程; I / O线程(也称为“完成端口线程”) 应该使用设备驱动程序进行工作,实质上“什么都不做”,只监视非CPU操作的完成情况。 什么不明确: 虽然方法ThreadPool.GetAvailableThreads返回两种types的可用线程的数量,似乎没有公共API来安排I / O线程的工作。 你只能在.NET中手动创build工作线程? 看来,单个I / O线程可以监视多个I / O操作。 这是真的吗? 如果是这样,为什么ThreadPool在默认情况下有很多可用的I / O线程? 在一些文本中,我读到了在I / O线程完成I / O操作完成后触发的callback。 这是真的吗? 考虑到这个callback是CPU操作,这对于工作线程来说不是一个工作吗? 更具体的 – 做ASP.NETasynchronous页面用户I / O线程? 切换I / O工作来分离线程,而不是增加最大工作线程数,性能究竟有什么好处? 是否因为单个I / O线程监视多个操作? 或者,当使用I / O线程时,Windows会更有效地切换上下文吗?
如果有几个线程在同一个FILE*variables上同时调用fflush() ,会发生什么不好的情况(如未定义的行为,文件损坏等) 澄清:我不是指同时写入文件。 我只是说同时冲洗它。 线程不会同时读取或写入文件(它们只在临界区内写入文件,一次只写一个线程)。 他们只在关键部分之外冲洗,尽快释放关键部分,让其他人做其他工作(文件写作除外)。 虽然可能发生一个线程正在写入文件(在关键部分内),而另一个线程正在刷新文件(在关键部分之外)。
如果我尝试编译一个程序 #include <pthread.h> 在其中,我得到的错误: pthread.h: No such file or directory 是否有可能得到这个在Windows环境下编译? 我正在用最新的MinGW使用Vista。 我不想使用Microsoft Windows Services for UNIX版本3.5,因为我将不得不将它移到Unix环境中。
我有一个Python脚本,有时会向用户显示图像。 图像有时可能很大,经常重复使用。 显示它们并不重要,但显示与它们相关的消息是。 我有一个function,下载所需的图像,并保存在本地。 现在,它与向用户显示消息的代码内联运行,但对于非本地图像,有时可能需要超过10秒。 有什么办法可以在需要的时候调用这个函数,但是在代码继续执行的时候在后台运行它? 我只是使用默认的图像,直到正确的一个可用。
说我有一个大型的数组,我想用多个线程处理内容。 如果我将每个线程委托给一个特定的部分,保证没有重叠,这是否消除了任何locking的需要,假设线程不访问数组之外的任何其他内存? 像这样的东西(伪代码): global array[9000000]; do_something(chunk) { for (i = chunk.start; i < chunk.end; i++) //do something with array } main() { chunk1 = {start: 0, end: 5000000}; chunk2 = {start: 5000000, end: 9000000}; start_thread(thread1, do_something(chunk1)); start_thread(thread2, do_something(chunk2)); wait_for_join(thread1); wait_for_join(thread2); //do something else with the altered array }
首先,我使用pthread库来编写multithreadingC程序。 线程总是挂在等待的互斥体上。 当我使用strace实用程序来查找一个线程处于FUTEX_WAIT状态时,我想知道哪个线程在那个时候持有该互斥体。 但我不知道该怎么做。 有没有公用事业可以做到这一点? 有人告诉我,Java虚拟机支持这个,所以我想知道Linux是否支持这个function。
使用pthread_cond_wait或使用信号量的优点/缺点是什么? 我正在等待这样的状态变化: pthread_mutex_lock(&cam->video_lock); while(cam->status == WAIT_DISPLAY) { pthread_cond_wait(&cam->video_cond, &cam->video_lock); } pthread_mutex_unlock(&cam->video_lock); 使用正确初始化的信号量,我想我可以这样做: while(cam->status == WAIT_DISPLAY) { sem_wait(&some_semaphore); } 每种方法的优缺点是什么?
假设我们有这个简单的例子: public Example extends Thread{ String temp; public Example(){ } @Override public void run(){ . . . . temp = "a_value"; } public static void main(String[] args) { Example th = new Example(); th.start(); } } 线程完成工作之后怎样才能让我返回String temp?
并行编程==multithreading编程?
我在Linux中使用pthread。 我想通过设置参数sched_param.priority来提高线程的优先级。 但是,我无法从网上find关于我可以设置的线程优先级的范围,或关于线程优先级的描述的更多信息。 另外,我想知道相对线程的优先级,因为我不想将线程优先级设置得太高而导致OS停止。 有人可以帮我吗?