天道酬勤,学无止境

multithreading

Top Level Task Causes Error “The current SynchronizationContext may not be used as a TaskScheduler.” [duplicate]

This question already has answers here: The current SynchronizationContext may not be used as a TaskScheduler (3 answers) Closed 6 years ago. I do not see the answer yet, although I have looked on stackoverflow and documentation. This error is coming up over the ContinueWidth below if I call the code that creates the tasks from a timer handler or within another task. For example, if it is wrapped in another task that creates tasks every interval (e.g. every 1 second) as follows. The only reason why I have the high level task is to create these lower tasks every interval. //Higher level task

2021-06-24 11:33:41    分类:问答    c#   wpf   multithreading   task

无堆栈python和多核?(Stackless python and multicores?)

问题 所以,我正在玩 Stackless Python,一个问题突然出现在我的脑海中,也许这是“假设”或“常见”的知识,但我在无堆栈站点上的任何地方都找不到它。 Stackless Python 是否利用了多核 CPU? 在普通 Python 中,GIL 一直存在,并且要(真正)使用多个内核,您需要使用多个进程,Stackless 也是如此吗? 回答1 Stackless的Python不使用任何类型的多核环境下的运行上。 这是对 Stackless 的常见误解,因为它允许程序员利用基于线程的编程。 对许多人来说,这两者密切相关,但实际上是两个独立的事物。 在内部,Stackless 使用循环调度器来调度每个 tasklet(微线程),但没有一个 tasklet 可以与另一个 tasklet 并发运行。 这意味着如果一个 tasklet 很忙,其他的 tasklet 必须等到那个 tasklet 放弃控制。 默认情况下,调度程序不会停止一个 tasklet 并将处理器时间分配给另一个。 tasklet 负责使用 Stackless.schedule() 或通过完成其计算将自己安排在调度队列的末尾。 因此,即使有多个核心可用,所有小任务也以顺序方式执行。 Stackless 没有多核支持的原因是因为这使得线程更容易。 这就是 stackless 的全部内容:

2021-06-24 11:19:59    分类:技术分享    python   multithreading   concurrency   multicore   python-stackless

Why .Net has no generic version of Thread.Start()?

I am wondering why .Net does not have a generic method for starting a thread. For example we start a thread like following.... Thread th = new Thread(SayHello); th.Start("Hello"); private static void SayHello(object obj) { string str = obj as string; Console.WriteLine(str); } Why can't we have I mean why .Net team did not consider making it generic ? Something like following... Thread<string> th = new Thread<string>(SayHello); Because many times when I pass value types to thread start I have to do boxing/unboxing.

2021-06-24 11:17:10    分类:问答    c#   multithreading

像 GCC 这样的编译器如何为 std::mutex 实现获取/释放语义(How compiler like GCC implement acquire/release semantics for std::mutex)

问题 我的理解是 std::mutex lock 和 unlock 有一个获取/释放语义,这将防止它们之间的指令被移到外面。 因此获取/释放应该禁用编译器和 CPU 重新排序指令。 我的问题是我查看了 GCC5.1 代码库,在 std::mutex::lock/unlock 中没有看到任何特殊内容以防止编译器重新排序代码。 我在 dos-pthread-mutex-lock-have-happens-before-semantics 中找到了一个潜在的答案,它表示一封邮件说外部函数调用充当编译器内存栅栏。 它总是真的吗? 标准在哪里? 回答1 所有这些问题都源于编译器重新排序的规则。 重新排序的基本规则之一是编译器必须证明重新排序不会改变程序的结果。 在std::mutex的情况下,该短语的确切含义在大约 10页的法律术语中指定,但“不改变程序的结果”的一般直觉意义成立。 如果您保证首先执行哪个操作,根据规范,则不允许编译器以违反该保证的方式重新排序。 这就是为什么人们经常声称“函数调用充当内存屏障”的原因。 如果编译器不能深入检查函数,就不能证明该函数内部没有隐藏屏障或原子操作,因此它必须将该函数视为屏障。 当然,也有编译器可以检查函数的情况,例如内联函数或链接时间优化的情况。 在这些情况下,不能依靠函数调用来充当屏障,因为编译器可能确实有足够的信息来证明重写的行为与原始行为相同

2021-06-24 10:56:45    分类:技术分享    c++   multithreading   c++11   gcc

如何等待 BackgroundWorker 完成然后退出控制台应用程序(How to wait for BackgroundWorker to finish and then exit console application)

问题 我已经编写了一个示例控制台应用程序来使用 Stackoverflow 中发布的示例之一来测试后台工作人员。 我有一个后台工作程序,它以 main 方法开始,但如果我按 Enter 键,它会在操作中间结束,因为我在 main 方法中编写了一个 console.readkey。 但我希望它等到后台工作人员完成工作然后退出应用程序。 这是我的代码。 class Program { private static BackgroundWorker worker = new BackgroundWorker(); private event EventHandler BackgroundWorkFinished; static void Main(string[] args) { worker.DoWork += worker_DoWork; worker.RunWorkerCompleted += worker_RunWorkerCompleted; worker.ProgressChanged += worker_ProgressChanged; worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; Console.WriteLine("Starting Application

2021-06-24 10:53:21    分类:技术分享    c#   .net   multithreading   backgroundworker

Multiprocessing in Python with read-only shared memory?

I have a single-threaded Python program, and I'd like to modify it to make use of all 32 processors on the server it runs on. As I envision it, each worker process would receive its job from a queue and submit its output to a queue. To complete its work, however, each worker process would need read-only access to a complex in-memory data structure--many gigabytes of dicts and objects that link to each other. In python, is there a simple way to share this data structure, without making a copy of it for each worker process? Thanks.

2021-06-24 10:46:20    分类:问答    python   multithreading   multiprocessing   shared-memory

使用 Runnable 和 postDelayed 更新 UI 不适用于计时器应用程序(Updating UI with Runnable & postDelayed not working with timer app)

问题 我已经查看了我可以找到的关于使其工作的所有讨论和线程,但事实并非如此。 我有一个简单的计时器来更新文本视图(下面示例中的 mTimeTextField)。 mUpdateTimeTask run 方法正在正确执行(每秒),但 UI/文本字段未更新。 我有基于此处找到的信息的代码: http://android-developers.blogspot.com/2007/11/stitch-in-time.html http://developer.android.com/resources/articles/timed-ui-updates.html 这是代码: package com.something.handlertest; import com.something.handlertest.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.SystemClock; import android.view.View; import android.widget.Button; import android.widget.TextView; public

2021-06-24 10:38:09    分类:技术分享    android   multithreading   timer   handler   postdelayed

Why is NSTimer blocked while another thread is running?

I'm trying to run a lenghty task in the background on the iPhone. I start it with performSelectorInBackground. I also create a NSTimer on the main thread just to check if things are working. I expected that the timer would run while the other thread does it's thing: - (void)viewDidLoad { [super viewDidLoad]; [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(onTimerEvent:) userInfo:nil repeats:YES]; [self performSelectorInBackground:@selector(lengthyMethod) withObject:nil]; NSLog(@"Here we go!"); } - (void)onTimerEvent:(NSTimer *)timer { NSLog(@"timer!"); } The

2021-06-24 10:36:16    分类:问答    iphone   multithreading   nstimer   asihttprequest

Run x number of web requests simultaneously

Our company has a web service which I want to send XML files (stored on my drive) via my own HTTPWebRequest client in C#. This already works. The web service supports 5 synchronuous requests at the same time (I get a response from the web service once the processing on the server is completed). Processing takes about 5 minutes for each request. Throwing too many requests (> 5) results in timeouts for my client. Also, this can lead to errors on the server side and incoherent data. Making changes on the server side is not an option (from different vendor). Right now, my Webrequest client will

2021-06-24 10:34:41    分类:问答    c#   multithreading   asynchronous   webrequest

从不同线程更新 UI(Update UI from different thread)

问题 这是我在这里的第一个问题。 由于英语不是我的第一语言,请原谅我的任何错误。 我正在尝试为 Windows Phone 8.1(XAML 和 C#)开发一个应用程序,我正在使用 .NET Framework 4.5.2。 我刚开始学习 C# 中的多线程,如果有人可以帮助我,我将不胜感激。 到目前为止,我发现的所有相关问题的答案都太复杂了。 我所需要的只是通过单击按钮创建一个新任务,该任务在文本块控件中显示一条消息。 private void myButton_Click(object sender, RoutedEventArgs e) { Task t = new Task(MyMethod); t.Start(); } private void MyMethod() { myTextBlock.Text = "Worked!"; } 我收到以下异常:应用程序调用了一个为不同线程编组的接口。 (来自 HRESULT 的异常:0x8001010E (RPC_E_WRONG_THREAD))。 我该如何纠正? 提前致谢! 回答1 如果您使用 async/await 编程模型,您可以很容易地做到这一点。 而不是你所拥有的,试试这样的: private async void myButton_Click(object sender, RoutedEventArgs e) { Task

2021-06-24 10:31:17    分类:技术分享    c#   multithreading   task   marshalling