在 C# 中打开线程是否与 CPU 线程相关?
Is opening a thread in C# related to a CPU thread?
我正在使用第 3 方库录制多个 USB 摄像头。为此,我在 C# 的单独线程上记录了每个摄像头的数据。问题是应用程序有时无法获取所有数据。
因此我想知道打开 C# 线程是否会阻塞我的 CPU 线程,因为我的 CPU 是 4 个核心/4 个线程。 CPU cores/threads 与我们在 C# 中初始化的线程有关吗?
这完全取决于您使用线程的方式。我可以想到至少 3 种不同的场景 - 1. 您的 cameraThread 被定义为高优先级,因此(即使有时间切片)占用了 99% 的时间。 2. 您的 cameraThread 是 运行 与任务线程池,因此它被阻塞并且随机地与其他线程阻塞(资源争用)。 3. 您的摄像机在后台以低优先级进行。
好吧,这取决于您将如何完成这项任务。录制摄像机视频可能是某些第 3 方库的一项功能,并且该库的 API 可能已经需要您的 UI(主)线程才能完成任务。如果您正在实现自己的低级记录 API 并希望从该 API 接收数据,那么您可能希望 运行 在单独的线程中获取数据,只需使用:
Task.Run(()=> {
// new thread running - your data fetching code here
});
这样,您的主线程就不会被阻塞,等待新线程会产生来自相机的结果 API。
我正在使用第 3 方库录制多个 USB 摄像头。为此,我在 C# 的单独线程上记录了每个摄像头的数据。问题是应用程序有时无法获取所有数据。 因此我想知道打开 C# 线程是否会阻塞我的 CPU 线程,因为我的 CPU 是 4 个核心/4 个线程。 CPU cores/threads 与我们在 C# 中初始化的线程有关吗?
这完全取决于您使用线程的方式。我可以想到至少 3 种不同的场景 - 1. 您的 cameraThread 被定义为高优先级,因此(即使有时间切片)占用了 99% 的时间。 2. 您的 cameraThread 是 运行 与任务线程池,因此它被阻塞并且随机地与其他线程阻塞(资源争用)。 3. 您的摄像机在后台以低优先级进行。
好吧,这取决于您将如何完成这项任务。录制摄像机视频可能是某些第 3 方库的一项功能,并且该库的 API 可能已经需要您的 UI(主)线程才能完成任务。如果您正在实现自己的低级记录 API 并希望从该 API 接收数据,那么您可能希望 运行 在单独的线程中获取数据,只需使用:
Task.Run(()=> {
// new thread running - your data fetching code here
});
这样,您的主线程就不会被阻塞,等待新线程会产生来自相机的结果 API。