concurrency 相关问题

在计算机科学中,并发性是系统的属性,其中可以在重叠的时间段中执行多个计算。计算可以在同一芯片中的多个核上执行,在同一处理器上抢占时间共享线程,或者在物理上分离的处理器上执行。

如何避免 .task SwiftUI View Modifier 在每次显示视图时调用我的异步函数?

我正在构建一个电影应用程序,其中包含电影列表,一旦按下某个项目,包含该电影详细信息的详细视图就会被推送到导航堆栈上。 所以我调用一个异步函数......

回答 1 投票 0

nodejs应用程序无法高效处理并发请求

我正在管理一个运行nodejs(next.js)应用程序的服务器,目前我将其视为黑匣子。我正在使用 Ecosystem.config.js 在 fork 模式下使用 pm2 运行该应用程序: 模组...

回答 1 投票 0

为什么我的 BACI 监控函数似乎不共享任何变量或条件?

我正在尝试编写一个并发程序,它将按顺序打印字母 A 和 B。 下面的程序看起来很好并且可以编译,但是每次运行它时,它都会死锁。 监控 simple_monitor ...

回答 1 投票 0

结构位域上的 std::atomic

我正在修改一些现有的开源库,并且有一个包含位字段的结构(例如名为 Node),例如 结构节点{ std::atomic 大小:30; std::原子 我正在修改一些现有的开源库,并且有一个包含位字段的结构(例如名为 Node),例如 struct Node { std::atomic<uint32_t> size:30; std::atomic<uint32_t> isnull:1; }; 为了满足我的需求,这些字段需要是原子的,所以我希望为此使用 std::atomic 并面临编译时错误: bit-field 'size' has non-integral type 'std::atomic<uint32_t>' 根据文档,有一组受限制的类型可用于 std::atomic 任何人都可以建议/了解如何在对现有源代码影响最小的情况下获得原子字段的功能吗? 提前致谢! (1) 您可以使用 这个示例 通过#defining 位来操作原子整数的位。 (2) 使用需要原子性的位域在编程上不太理想,但您可以牺牲 8 位并使用并集在位域中插入 std::atomic_flag(锁)。 每次访问该结构时都可以手动旋转锁定。但是,代码的性能应该比使用 std::mutex 和 std::unique_lock 创建、锁定、解锁、销毁更好。此代码可能会浪费大约 10-30 个时钟周期来启用低成本多线程。 PS。确保下面保留的 8 位不会被处理器的字节序结构弄乱。您可能必须在末尾定义大端处理器。我只在 Intel CPU 上测试了这段代码(始终是小端)。 // Use when the operation is quick to avoid mutex locks, // but too long to fit into a single atomic operation, #include <iostream> #include <atomic> #include <thread> union Data { std::atomic_flag access = ATOMIC_FLAG_INIT; // one byte struct { typedef unsigned short ushort; ushort reserved : 8; ushort count : 5; ushort ready : 1; ushort mult : 2; } bits; }; class SpinLock { public: inline SpinLock(std::atomic_flag &access, bool locked=true) : mAccess(access) { if(locked) lock(); } inline ~SpinLock() { unlock(); } inline void lock() { while (mAccess.test_and_set(std::memory_order_acquire)) { } } // each attempt will take about 10-30 clock cycles inline bool try_lock(unsigned int attempts=0) { while(mAccess.test_and_set(std::memory_order_acquire)) { if (! attempts) return false; -- attempts; } return true; } inline void unlock() { mAccess.clear(std::memory_order_release); } private: std::atomic_flag &mAccess; }; void aFn(int &i, Data &d) { SpinLock lock(d.access, false); // ... some code... // manually locking/unlocking can be tighter lock.lock(); if (d.bits.ready) { ++d.bits.count; } d.bits.ready ^= true; // alternate each time lock.unlock(); // ... some other code... } void aFn2(int &i, Data &d) { // When you need to lock the entire function SpinLock lock(d.access); if (d.bits.ready) { d.bits.count += d.bits.mult; } d.bits.ready ^= true; ++ d.bits.mult; } // returning will free up the lock as well int main(void) { Data f; f.bits.count = 0; f.bits.ready = true; f.bits.mult = 1; std::thread *p[8]; for (int i = 0; i < 8; ++ i) { p[i] = new std::thread([&f] (int i) { aFn(i, f); }, i); } for (int i = 0; i < 8; ++i) { p[i]->join(); delete p[i]; } std::cout << "size: " << sizeof(f) << std::endl; std::cout << "count: " << f.bits.count << std::endl; } 结果正如预期的那样... 尺寸:2 数量:4

回答 1 投票 0

一个简单的Go模拟——并发问题

我是一名来自波兰的学生,这学期我开始了并发编程课程(Go、Ada,以及将来的一些理论和 CSP 语言)。不是说谎,Golang 看起来很有趣,但我有一点

回答 1 投票 0

在 C 中运行并发进程并测量运行时间

我正在用 C 创建一个程序,从文件中加载一个矩阵,将其分为 N 个段以提供给 N 个进程。 每个进程都应该计算该矩阵段中的每个 0 元素。 我应该...

回答 1 投票 0

保留输入到输出的顺序,而每个输出都来自应该读取一次的文件

我正在努力想出关于特定功能的最佳方式来构建我的程序。 以下是一些细节: 函数的输入是(纬度,经度)坐标向量

回答 1 投票 0

带有背压的ExecutorService

我对 ExecutorService 有以下要求: 并发处理任务(线程)数量有限,最好是可配置的 当所有线程都被占用后,后续提交任务...

回答 2 投票 0

在 GO lang 中使用 Select 时出现死锁

我对下面的GO程序有疑问,该程序使用go例程和select语句计算字母、数字、特殊字符和空格的数量 函数主() { 字母 := make(cha...

回答 2 投票 0

高性能融合生产者/消费者模式

假设你有以下界面: 接口 IConflateWorkByKey { IAsyncEnumerable> GetValues(); void Publish(TKey 键, TValue 值);...

回答 1 投票 0

Python:在线程中使用 ThreadPoolExecutor

我正在使用以下脚本在线程中使用 ThreadPoolExecutor: def 工人(x): 返回x*x def FncWithinThread(): 使用 ThreadPoolExecutor(10) 作为执行器: 期货_t 在此输入 o_dat...

回答 1 投票 0

scheduleAtFixedRate 立即执行任务,应在定义的延迟后运行。

导入java.util.concurrent.Executors; 导入 java.util.concurrent.ScheduledExecutorService; 导入 java.util.concurrent.TimeUnit; 类 MyTask1 实现 Runnable{ 我的任务1(){ 新线程(这个)。

回答 2 投票 0

更新环境变量 PATH 时是否可能出现竞争条件?这是可以避免的吗?

如果在 Windows 上运行的两个或多个应用程序尝试同时将文件夹名称附加到环境变量 PATH,是否可能会出现竞争条件,使得其中一个值

回答 2 投票 0

如何在 Swift 中的异步函数中的等待之前对代码进行单元测试?

我刚开始使用 swift 的现代并发性,并且仍在学习它是如何工作的。我有一个以下测试用例,我想在调用 getUsers() 函数时测试 viewState 是否等于 .loading,但是...

回答 1 投票 0

使用通道将数据从一个 Goroutine 传递到另一个 Goroutine 的问题

我已经能够开发以下代码,该代码应该使用 go 通道将数据从一个例程传递到另一个例程: 包主 进口 ( “FMMT” “同步” ) func 生成数字(...

回答 1 投票 0

JMeter 和 Spring Boot Web 服务器之间的并发线程数限制为 2000 个

我观察到 JMeter 和简单的 Spring Boot Web 服务器之间的奇怪行为,两者都在我的本地计算机上运行。 我在多个线程中同时运行一个简单的 Web 服务调用。当我设置 JMe 时...

回答 1 投票 0

带有中间结果的活泼的单项检查习语

活泼的单检查习惯用法是一种无需同步或易失性的延迟初始化技术。当允许多个线程同时执行初始化时可以使用...

回答 1 投票 0

如何等待一组动态的 Ballerina 未来值?

我需要编写一个 ballerina util 函数,该函数可以等待给定的一组 future 并返回结果,其中 future 值的数量可以变化,如下所示

回答 1 投票 0

使用生成器尝试finally的行为

我正在关注 O'Reilly 上 Brett Slatkin 的有效 Python 课程:https://learning.oreilly.com/videos/ effective-python/9780134175249/ 我在学习时遇到了以下代码片段

回答 1 投票 0

创建可迭代的 Promise 需要更长的时间

我正在尝试使用 Promise 并行化我的数据库查询。 假设我需要进行 35000+ 数据库查询,并且我尝试使用 Promise.all([iterables]) 来实现它。我面临的问题是...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.