【发布时间】:2021-02-04 21:42:08
【问题描述】:
我有一个场景,我想在 API 调用之后将数据写入磁盘。性能至关重要,因此我将每个线程的数据写入单独的每个线程文件。为了优化写入,我在内存中缓存数据,当缓冲区满或缓冲区中的数据老化时写入缓冲区。
问题是我不能让缓冲区中的数据老化太多。我只能在调用 API 函数时写入数据。如果 API 函数被调用一次并且我缓冲了数据,那么我必须等到再次调用 API 函数以确定数据是否过时或缓冲区已满,才能将其写入磁盘。这可能为时已晚,数据也太陈旧了。
我在想我可以有另一个线程定期检查缓冲区,如果数据老化太多,无论如何都会写出数据。我想以一种高性能的方式来做,不使用 pthread 条件和互斥锁,而是(理想情况下)原子等,我认为这会更快。我不确定完成这项工作所需的 GCC 内置函数。大多数关于内存栅栏的文档似乎都与指令顺序有关,而不是可见性。
【问题讨论】:
-
您的问题是什么?您可能会问“尝试使用原子等是否明智”,或“我如何使用原子等”或其他内容。你测量过使用条件和互斥锁的性能吗?
标签: c multithreading gcc pthreads mutex