草庐IT

GC_concurrent

全部标签

c++ - 根据intel博客实现concurrent_vector

我正在尝试实现一个线程安全的无锁容器,类似于std::vector,根据这个https://software.intel.com/en-us/blogs/2008/07/24/tbbconcurrent_vector-secrets-of-memory-organization据我了解,为了防止重新分配并使所有线程上的所有迭代器无效,它们添加了新的连续block,而不是单个连续数组。他们添加的每个block的大小都是2的递增幂,因此他们可以使用log(index)来找到应该在[index]处的项目所在的正确段。据我所知,他们有一个指向段的静态指针数组,所以他们可以快速访问它们,但是他们

c++ - RAII 什么时候比 GC 更有优势?

考虑这个在C++中演示RAII的简单类(从我的脑海中):classX{public:X(){fp=fopen("whatever","r");if(fp==NULL)throwsome_exception();}~X(){if(fclose(fp)!=0){//Anerror.Nowwhat?}}private:FILE*fp;X(Xconst&)=delete;X(X&&)=delete;X&operator=(Xconst&)=delete;X&operator=(X&&)=delete;}我不能在析构函数中抛出异常。我有一个错误,但没有办法报告它。这个例子非常通用:我不仅可以使用

c# - GC 与 C# 和 C++ 在同一解决方案中

我有一个由多个C#项目组成的解决方案。它是用C#编写的,以便快速运行。垃圾收集开始成为一个问题——我们发现我们希望避免大约100毫秒的延迟。一个想法是用C++重新编写它,一个项目一个项目。但是如果将C#与非托管C++结合起来,C++项目中的线程是否也会被垃圾回收卡住?更新感谢您的回复。事实上,这是一个100毫秒可能很重要的应用程序。用C#构建它可能是一个糟糕的决定,但它必须在当时快速启动并运行。现在,我们正在使用Windows的MultimediaTimers每5毫秒触发一次事件。我们确实看到了大约100多毫秒的间隔,并且我们通过检查GC计数器确认这些间隔总是在收集期间发生。优化开启;

c++ - C++ 有垃圾收集器(GC)吗?

我目前正在阅读一篇未发表的硕士论文报告,我将提供反馈。在报告中,他们提到了原生C++和托管C++下的垃圾收集器。我以为C++没有任何标准的GC,我是对还是错?(他们没有提到Boehm-Demers-Weiser。)他们在某些条件下无法正常工作。他们在一个线程中创建对象,然后从另一个线程中删除指针。 最佳答案 NativeC++默认没有这样的东西(最接近的东西是智能指针,但这仍然是完全不同的东西),但这并不妨碍你编写自己的垃圾收集解决方案(或使用thirdpartysolution)。托管C++(及其后续C++/CLI)当然对托管资源

c++ - 为什么 concurrent_queue 是非阻塞的?

在VS2010引入的并发运行时,有一个concurrent_queue类。它有一个非阻塞的try_pop()函数。与英特尔线程构建模块(TBB)类似,从2.1版升级到2.2版时,阻塞的pop()调用已被删除。我想知道阻塞调用有什么问题。为什么从TBB中删除?还有为什么没有阻塞concurrent_queue?我处于需要阻塞并发队列的情况,并且我不想忙于等待。除了自己写队列,并发运行时是否还有其他可能? 最佳答案 来自acommentfromArchRobison,并没有更多"horse'smouth"比那个(a):PPL的concu

node.js - nodejs v8内存gc分配失败

我正在尝试使用无操作服务器来分析nodejsv8内存。我使用node-memwatch来获取堆差异。我在连接之前和连接断开之后收集堆信息。我使用了Node内存监视。我从客户端尝试了200个并发连接。这是连接断开后的gc跟踪。谁能帮我理解:1.为什么内存在增加?连接断开后,服务器绝对什么都不做。它不应该假设总是随着垃圾被收集而丢弃吗?2.那些分配失败是什么?我如何真正解释这里的痕迹?15802ms:Mark-sweep8.9(45.0)->8.1(45.0)MB,58ms[allocationfailure][GCinoldspaceforcedbyflags].16144ms:Mark

node.js - Node/ express : concurrency issues when using session to store state

因此,我为此进行了相当多的搜索,发现了几个有点相似的问题,但没有一个真正解决了这个问题,所以我认为这值得自己提出一个问题。我有一个快速应用程序,其中包含一组修改session以保持状态的路由。问题是,如果有多个并行请求,由于请求之间的竞争条件,session将不时被覆盖。通常...app.use(express.static('/public'));app.use(session(...));app.route('methodA').get(function(req,res,next){doSomethingSlow().then(function(){req.session.a='f

concurrency - Node.js 或 Erlang

当谈到它可以处理的并发级别时,我真的很喜欢这些工具。Erlang/OTP看起来像更稳定的解决方案,但需要更多的学习和大量深入研究函数式语言范式。看起来Erlang/OTP在多核CPU方面做得更好(如果我错了,请纠正我)。但是我应该选择哪个?从短期和长期角度来看,哪个更好?我的目标是学习一种工具,它可以比传统语言更容易地在高负载下扩展我的Web项目。 最佳答案 我会试试Erlang。尽管这将是一个更陡峭的学习曲线,但由于您将学习一门函数式编程语言,因此您会从中获得更多yield。此外,由于Erlang专为创建可靠、高度并发的系统而设计

ruby - Rails:在任何源中都找不到 concurrent-ruby-1.0.5 (Bundler::GemNotFound)

我已经用Google搜索了很多次,但没有发现任何对我的情况有用的东西。$docker-composeupabc在日志中产生以下内容:/usr/lib/ruby/vendor_ruby/bundler/spec_set.rb:92:in`blockinmaterialize':Couldnotfindconcurrent-ruby-1.0.5inanyofthesources(Bundler::GemNotFound)from/usr/lib/ruby/vendor_ruby/bundler/spec_set.rb:85:in`map!'from/usr/lib/ruby/vendor_

python - 与 Python 中的多处理相比,concurrent.futures 有哪些优势?

我正在用Python编写一个应用程序,我需要同时运行一些任务。模块multiprocessing提供类Process并且concurrent.futures模块具有类ProcessPoolExecutor。两者似乎都使用多个进程来执行它们的任务,但它们的API是不同的。为什么我应该使用一个而不是另一个?我知道concurrent.futures是在Python3中添加的,所以我想它更好? 最佳答案 PEP中介绍了concurrent.futures的动机。.在我的实践经验中,concurrent.futures为长时间运行的任务提交