小编Hor*_*cio的帖子

shared_ptr断言px!= 0失败

我有一个相当复杂的多线程应用程序(服务器),由于断言,有时会崩溃:

/usr/include/boost/smart_ptr/shared_ptr.hpp:418: T* boost::shared_ptr< <template-parameter-1-1> >::operator->() const [with T = msg::Player]: Assertion `px != 0' failed.
Run Code Online (Sandbox Code Playgroud)

我一直无法确定原因,并想知道这是一个问题与boost :: shared_ptr或它是我吗?

我尝试了g ++ 4.4.3-4ubuntu5和llvm-g ++(GCC)4.2.1优化而没有优化和libboost1.40-dev(= 1.40.0-4ubuntu4).

boost-thread shared-ptr

30
推荐指数
1
解决办法
4万
查看次数

Lustre,Gluster或MogileFS ?? 用于视频存储,编码和流媒体

这么多的选项和很少的时间来测试它们......我想知道是否有人有分布式文件系统的视频流和存储/编码经验.

我有很多巨大的视频文件(50GB到250GB),我需要存储在某个地方,能够将它们编码为mp4并从几个Adobe FMS服务器流式传输.处理所有这一切的唯一方法是使用分布式文件系统,但现在的问题是哪个?

到目前为止我的研究告诉我:

  • Lustre:成熟的成熟解决方案,被许多大公司使用,最好用> 10G文件是内核驱动程序.
  • Gluster:新的,不太成熟,基于FUSE意味着易于安装,但由于FUSE开销可能会更慢.最好处理大量的小文件〜1GB
  • MogileFS:似乎只适用于小文件~MB,使用HTTP进行访问?未来可能的FUSE绑定.

到目前为止,Lustre似乎是赢家,但我希望听到我所拥有的特定应用的真实体验.

此外,Hadoop,Redhat GFS,Coda和Windows DFS也可作为选项,因此欢迎任何体验.如果有人有基准,请分享.

经过一些实际经验后,这就是我所学到的:

  • 光泽:
    • 表现:惊人的快!我可以断言Lustre可以服务很多流,并且通过Lustre访问文件不会影响编码速度.
    • POXIS兼容性:非常好!无需修改应用程序即可使用光泽.
    • 复制,负载平衡和故障转移:非常糟糕!对于复制负载平衡我们和故障转移,我们需要依赖其他软件,如虚拟IP和DRDB.
    • 安装:最糟糕的!凡人都无法安装.需要非常具体的内核,光泽补丁和调整组合才能使其正常工作.目前的光泽补丁通常适用于与新硬件/软件不兼容的旧内核.
  • MogileFS:
    • 性能:适用于小文件但不适用于中型到大型文件.这主要是由于HTTP开销,因为所有文件都是通过HTTP请求发送/接收的,这些请求对base64中的所有数据进行编码,为每个文件增加了33%的开销.
    • POXIX兼容性不存在.所有应用程序都需要修改为使用mogilefs,因为大多数流服务器和编码工具都不了解MogileFS协议,因此它无法用于流/编码.
    • 通过一次访问多个跟踪器,可以在应用程序中实现开箱即用的复制和故障转移以及负载平衡.
    • 安装相对容易,大多数发行版中都有现成的软件包.我发现的唯一困难是设置数据库主从,以消除单点故障.
      • Gluster:
    • 性能:非常糟糕的流式传输.在10Gbps网络中,我无法达到超过几Mbps的速度.客户端和服务器CPU在大量写入时飙升.对于编码是有效的,因为CPU在网络和I/O之前已经饱和.
    • POXIS:几乎兼容.我使用的工具可以访问gluster挂载作为磁盘中的普通文件夹,但在某些边缘情况下,事情开始引起问题.检查gluster邮件列表,你会发现有很多问题.
    • 复制,故障转移和负载平衡:最好的!如果他们真的有效 Gluster非常新,它有很多bug和性能问题.
    • 安装太简单了.管理命令行非常棒,在多个服务器之间设置复制,条带和分布式卷并不容易.

定论:

不幸的是,结论是"没有单一的银弹".

目前,我们将Gluster3.2中的媒体文件放在复制卷中以进行存储和转码.只要您没有很多服务器,就可以避免地理复制和条带卷工作正常.

当我们要传输媒体文件时,我们将它们复制到通过DR:DB复制到第二个光泽卷的光泽卷.然后,wowza服务器从光泽卷中读取媒体文件.

最后,我们使用MogileFS来提供Web应用程序服务器中的缩略图.

video streaming microsoft-distributed-file-system

28
推荐指数
2
解决办法
2万
查看次数

通过redis-cli检查并重试resque作业

由于我仍然需要处理的一些问题,我无法在我的服务器上运行resque-web但我仍然需要在我的resque队列中检查并重试失败的作业.

有没有人有任何关于如何查看失败的作业队列以查看错误是什么以及如何使用redis-cli命令行重试它的经验?

谢谢,

command-line resque redis

24
推荐指数
1
解决办法
2万
查看次数

以前的力量2

有很多关于如何找到给定值的2的下一个幂的信息(参见参考文献),但我找不到任何以前的2的幂.

到目前为止,我找到的唯一方法是保持一个具有2的所有幂的表,最多2 ^ 64并进行简单的查找.

algorithm

18
推荐指数
5
解决办法
1万
查看次数

使用C++模板在编译时在AbstractFactory中动态注册构造函数方法

当实现MessageFactory类来实例化Message对象时,我使用了类似的东西:

class MessageFactory 
{
  public:
    static Message *create(int type)
    {
       switch(type) {
         case PING_MSG:
            return new PingMessage();
         case PONG_MSG:
            return new PongMessage();
         ....
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常但每次添加新消息时我都要添加一个新的XXX_MSG并修改switch语句.

经过一些研究后,我发现了一种在编译时动态更新MessageFactory的方法,因此我可以添加任意数量的消息,而无需修改MessageFactory本身.这样可以更简洁,更容易维护代码,因为我不需要修改三个不同的位置来添加/删除消息类:

#include <stdio.h>                                                                                                                                                                           
#include <stdlib.h>                                                                                                                                                                          
#include <string.h>                                                                                                                                                                          
#include <inttypes.h>                                                                                                                                                                        

class Message                                                                                                                                                                                
{                                                                                                                                                                                            
   protected:                                                                                                                                                                                
      inline Message() {};                                                                                                                                                                   

   public:                                                                                                                                                                                   
      inline virtual ~Message() { }                                                                                                                                                          
      inline int getMessageType() const { return m_type; }                                                                                                                                   
      virtual void say() = 0;                                                                                                                                                                

   protected:                                                                                                                                                                                
      uint16_t m_type;                                                                                                                                                                       
};                                                                                                                                                                                           

template<int TYPE, typename IMPL>                                                                                                                                                            
class MessageTmpl: public Message                                                                                                                                                            
{                                                                                                                                                                                            
   enum { _MESSAGE_ID = TYPE }; …
Run Code Online (Sandbox Code Playgroud)

c++ templates factory-pattern

11
推荐指数
2
解决办法
5743
查看次数

使jqGrid填充其容器

我在我的一个项目中使用jQuery布局插件和jqGrid插件,除了一些小问题外,它们工作得很好......

我希望jqGrid完全填满包含它的窗格(jQuery布局窗格).调整窗格大小应该调整jqGrid的大小,关闭窗格应该隐藏jqGrid等等.

jqGrid和jQuery Layout都提供回调,但是当我使用它们时,页面布局可怕地破坏.

有没有人有任何经验混合jqGrid与jQuery布局?

  1. http://www.secondpersonplural.ca/jqgriddocs/index.htm
  2. http://layout.jquery-dev.net/

jquery jqgrid jquery-layout

8
推荐指数
1
解决办法
2万
查看次数

在rake任务中运行时,bundle包失败

我的环境

香草Ubuntu 12.10,没有rvm或renv.

> gem --version
1.8.23

> ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]

> bundle --version
Bundler version 1.2.1
Run Code Online (Sandbox Code Playgroud)

我的问题

我有一个rake任务来打包我的宝石并将它们上传到我的开发和生产服务器.问题是当Gemfile包含git或path gems时,rake任务失败.Bundler已经支持这些类型的宝石的包装,它在我的终端上工作得很好但是在运行rake任务时失败了,我找不到原因.

我的佣金任务

> cat lib/tasks/upload.rake

namespace :deploy do
  desc "Package all gems and upload to remote server"
  task :upload => [:environment] do |t, args|
    if ! system("bundle package --all")
      raise "TOTAL FAIL"
    end

    # Magic method to upload vendor/cache to remote server
  end
end
Run Code Online (Sandbox Code Playgroud)

我的尝试

在终端中运行捆绑包工作:

> bundle package --all
....
Using bson (1.7.0) …
Run Code Online (Sandbox Code Playgroud)

ruby bundle rake-task

7
推荐指数
2
解决办法
1427
查看次数

什么OpenId插件/ gem我将用于我的Rails应用程序?

有这么多的插件/宝石,但它们必须有过时的文档或根本没有文档.

从我所看到的有Rails openid,Eastmedia openid,Authlogic openid,rails kit openid插件和gem搜索我们有rails_openid,pelle-ruby-openid,rack-openid,openid_auth,openid_fu_generator,openid_login_generator等等.

某些博客中记录的那些插件在rails 2.3.5/ruby​​ 1.9.1上对我不起作用,而且我总是在某些时候陷入困境.我可以通过宝石安装所有插件,但文档让我想知道如何在我的Rails应用程序中使用它们.

那么什么是最好的插件/ gem或更好的最近教程如何使用Restful Open ID身份验证实现Rails 2.3.5/Ruby 1.9.1应用程序?如果插件/ gem支持OpenID/Oauth混合会更好,因为我计划添加OAuth后来在我的几个应用程序之间共享内容.

openid ruby-on-rails

5
推荐指数
1
解决办法
676
查看次数

线程安全的mersenne twister

寻找一个线程安全的随机生成器我找到了一个mersenne twister生成器类,作者说如果线程安全:

http://www.umiacs.umd.edu/~yangcj/mtrnd.html

但在研究了代码后,我看不出它是安全的线程.在那里没有任何类型的锁或类似锁变量的任何东西.

这个实现真的是线程安全吗?如果是这样,那魔术是什么?

thread-safety mersenne-twister

5
推荐指数
2
解决办法
2062
查看次数