Questions tagged «multithreading»

多线程是计算机或程序通过利用多个并发的执行流(通常称为线程)来并发或异步执行工作的能力。

3
如果线程共享相同的PID,则如何识别它们?
我有一个与Linux中线程实现有关的查询。 Linux没有显式线程支持。在用户空间中,我们可能使用线程库(例如NPTL)来创建线程。现在,如果我们使用NPTL,则它支持1:1映射。 内核将使用该clone()函数来实现线程。 假设我创建了4个线程。那么就意味着: 将有4个task_struct。 在内部task_struct,将根据克隆参数提供共享资源(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)。 现在,我有以下查询: 4个线程的PID是否相同?如果有人可以详细说明,则如何共享PID。 如何识别不同的线程;有一些TID(线程ID)概念吗?


9
为什么我不是原子++?
为什么i++在Java中不是原子的? 为了更深入地了解Java,我尝试计算线程中的循环执行的频率。 所以我用了 private static int total = 0; 在主要班级。 我有两个线程。 线程1:打印 System.out.println("Hello from Thread 1!"); 线程2:打印 System.out.println("Hello from Thread 2!"); 我计算了线程1和线程2打印的行数,但是线程1的行+线程2的行数与打印出的行总数不匹配。 这是我的代码: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; public class Test { private static int total = 0; private static int countT1 = 0; private static int …

4
iPhone ios在单独的线程中运行
在单独的线程上运行代码的最佳方法是什么?是吗: [NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL]; 要么: NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doStuff:) object:nil; [queue addOperation:operation]; [operation release]; [queue release]; 我一直在做第二种方式,但我一直在阅读的《韦斯利食谱》使用的是第一种方式。

11
java.lang.OutOfMemoryError:Java堆空间
我在执行多线程程序时遇到以下错误 java.lang.OutOfMemoryError: Java heap space 上面的错误发生在其中一个线程中。 据我所知,堆空间仅由实例变量占用。如果这是正确的,那么为什么在运行一段时间后会出现此错误,因为在创建对象时分配了实例变量的空间。 有什么办法可以增加堆空间? 我应该对程序进行哪些更改,以便它将占用更少的堆空间?

3
Android AsyncTask线程限制?
我正在开发一个应用程序,每次用户登录系统时我都需要更新一些信息,我也在电话中使用数据库。对于所有这些操作(更新,从db检索数据等),我使用异步任务。到现在为止,我还不明白为什么不使用它们,但是最近我体验到,如果我执行一些操作,一些异步任务只会在执行前停止,而不会跳转到doInBackground。真是太奇怪了,不能像现在这样保留它,所以我开发了另一个简单的应用程序来检查问题所在。奇怪的是,当异步任务总数达到5个时,我会得到相同的行为,第6个异步任务在预执行时停止。 android在Activity / App上是否有asyncTasks的限制?还是只是一些错误,应该报告?有没有人遇到过同样的问题,也许找到了解决方法? 这是代码: 只需创建其中的5个线程即可在后台工作: private class LongAsync extends AsyncTask<String, Void, String> { @Override protected void onPreExecute() { Log.d("TestBug","onPreExecute"); isRunning = true; } @Override protected String doInBackground(String... params) { Log.d("TestBug","doInBackground"); while (isRunning) { } return null; } @Override protected void onPostExecute(String result) { Log.d("TestBug","onPostExecute"); } } 然后创建这个线程。它将输入preExecute并挂起(不会转到doInBackground)。 private class …

7
线程之间共享静态变量吗?
我的高级Java课堂上有关线程的老师说了一些我不确定的东西。 他指出,以下代码不一定会更新ready变量。据他介绍,这两个线程不一定共享静态变量,特别是在每个线程(主线程与ReaderThread)在其自己的处理器上运行并且因此不共享相同的寄存器/缓存/等和一个CPU的情况下。不会更新其他。 从本质上讲,他说有可能ready在主线程中进行更新,而不是在中进行更新ReaderThread,因此ReaderThread将无限循环。 他还声称该程序可以打印0或打印42。我了解如何42打印,但不是0。他提到将number变量设置为默认值时就是这种情况。 我认为也许不能保证在线程之间更新静态变量,但是这对Java来说很奇怪。使ready挥发物能纠正这个问题吗? 他显示了以下代码: public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread { public void run() { while (!ready) Thread.yield(); System.out.println(number); } } public static void main(String[] args) { new ReaderThread().start(); number = 42; ready = true; } …

3
Python是否支持多线程?可以加快执行时间吗?
我对多线程是否可以在Python中工作感到有些困惑。 我知道对此有很多疑问,我已经阅读了很多,但是我仍然很困惑。我从我自己的经验中知道,并且看到其他人在StackOverflow上发表了自己的答案和示例,在Python中确实可以实现多线程。那么,为什么每个人都在说Python被GIL锁定并且一次只能运行一个线程呢?显然可以。还是我不来这里有什么区别? 许多张贴者/受访者还不断提到线程是有限的,因为它不使用多个核心。但是我会说它们仍然有用,因为它们可以同时工作,因此可以更快地完成合并的工作量。我的意思是为什么还要有Python线程模块呢? 更新: 到目前为止,感谢您提供所有答案。据我了解,多线程只能并行运行某些IO任务,而一次只能运行一个CPU绑定的多个核心任务。 我并不完全确定这对我实际上意味着什么,所以我仅举一个我想进行多线程的任务示例。例如,假设我要遍历很长的字符串列表,并且希望对每个列表项执行一些基本的字符串操作。如果拆分列表,将每个要由循环/字符串代码处理的子列表发送到新线程中,然后将结果发送回队列中,这些工作负载是否会大致同时运行?最重要的是,从理论上讲,这会加快运行脚本的时间吗? 另一个例子可能是,如果我可以在四个不同的线程中使用PIL渲染和保存四张不同的图片,并且这比一张又一张地处理图片要快吗?我想这个速度要素是我真正想知道的,而不是正确的术语。 我也了解多处理模块,但是我现在的主要兴趣是中小型任务负载(10-30秒),因此我认为多线程将更合适,因为子进程的启动速度很慢。

3
在WPF中安全地访问UI(主)线程
我有一个应用程序,该应用程序每次以以下方式更新我正在监视的日志文件(附加新文本)时都会更新我的datagrid: private void DGAddRow(string name, FunctionType ft) { ASCIIEncoding ascii = new ASCIIEncoding(); CommDGDataSource ds = new CommDGDataSource(); int position = 0; string[] data_split = ft.Data.Split(' '); foreach (AttributeType at in ft.Types) { if (at.IsAddress) { ds.Source = HexString2Ascii(data_split[position]); ds.Destination = HexString2Ascii(data_split[position+1]); break; } else { position += at.Size; } …


12
CoreData:警告:无法加载名为的类
我正在使用Xcode 6.1将现有的Objective-C电视节目应用程序复制到新的Swift版本,并且CoreData出现了一些问题。 我创建了一个包含4个实体的模型,创建了它们的NSManagedObject子类(在Swift中),并且所有文件都设置了正确的应用程序目标(针对“编译源”)。 每当我尝试插入新实体时,我仍然会收到此错误: CoreData:警告:无法为实体“ Shows”加载名为“ Shows”的类。找不到类,而是使用默认的NSManagedObject。 一些评论: 当保存到Core Data时,我使用父子上下文方法来允许后台线程。我通过使用以下方法设置ManagedObjectContext来做到这一点: lazy var managedObjectContext: NSManagedObjectContext? = { // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause …

6
如何在Python中使用多处理队列?
我很难理解多处理队列如何在python上工作以及如何实现它。假设我有两个python模块,它们从共享文件访问数据,让我们将这两个模块称为writer和Reader。我的计划是使读取器和写入器都将请求放入两个单独的多处理队列中,然后让第三个进程将这些请求循环弹出并照此执行。 我的主要问题是我真的不知道如何正确实现multiprocessing.queue,您不能为每个进程真正实例化对象,因为它们将是单独的队列,如何确保所有进程都与共享队列相关(或在这种情况下,排队)

6
C ++终止调用,没有活动异常
我在线程获取C ++错误: terminate called without an active exception Aborted 这是代码: #include <queue> #include <thread> #include <mutex> #include <condition_variable> template<typename TYPE> class blocking_stream { public: blocking_stream(size_t max_buffer_size_) : max_buffer_size(max_buffer_size_) { } //PUSH data into the buffer blocking_stream &operator<<(TYPE &other) { std::unique_lock<std::mutex> mtx_lock(mtx); while(buffer.size()>=max_buffer_size) stop_if_full.wait(mtx_lock); buffer.push(std::move(other)); mtx_lock.unlock(); stop_if_empty.notify_one(); return *this; } //POP …

3
FixedThreadPool与CachedThreadPool:两种弊端中的较小者
我有一个程序产生线程(〜5-150)来执行一堆任务。最初,我使用a,FixedThreadPool因为这个类似的问题表明它们更适合寿命更长的任务,并且由于我对多线程的了解非常有限,我认为线程的平均寿命(几分钟)是“ 寿命长 ”的。 但是,我最近添加了产生更多线程的功能,并且这样做使我超出了我设置的线程限制。在这种情况下,最好猜测并增加我可以允许的线程数,或者切换到a CachedThreadPool以便没有浪费的线程? 初步尝试将它们都尝试一下,似乎没有什么区别,所以我倾向于选择CachedThreadPool正义以避免浪费。但是,线程的寿命是否意味着我应该改而选择a FixedThreadPool并只处理未使用的线程?这个问题使得它看起来像那些额外的线程不被浪费,但我希望澄清。

4
C#:如果从多个线程调用静态方法怎么办?
在我的应用程序中,我有一个静态方法,该方法同时从多个线程中调用。我的数据有混淆的危险吗? 在我的第一次尝试中,该方法不是静态的,并且我正在创建该类的多个实例。在这种情况下,我的数据会以某种方式混淆。我不确定这是怎么发生的,因为它只是偶尔发生。我还在调试。但是现在该方法是静态的,到目前为止我还没有问题。也许只是运气。我不确定

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.