小编jav*_*red的帖子

学习如何编写延迟关键,快速C++/Java/C#代码的最佳方法?

谁能给我一些关于学习如何进行极低延迟编程的最佳方法的指示?我有很多编程书籍,但我从来没有见过一个专注于(或帮助)编写极快代码的书籍.或者书籍不是最好的前进方式?

非常感谢专家的一些建议!

编辑:我想我更多地指CPU /内存绑定.

c# c++ java low-latency

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

将BlockingCollection <T>用作单生成器,单用户FIFO查询是否合适?

我需要单生成器,单用户FIFO查询,因为

  • 我需要按照收到的顺序处理邮件.
  • 我需要这样做异步,因为调用者不应该在我处理消息时等待.
  • 只有在前一个消息处理完成时才应启动下一个消息处理.有时"接收"消息的频率高于"处理"消息的频率.但平均而言,我应该能够处理所有消息,有时候我必须"排队"它们.

所以它非常像我认为的TCP/IP,你有一个生产者和一个消费者,有时你可以比你可以处理的更快地接收消息,所以你必须查询它们.在哪里订单很重要,并且调用者绝对不感兴趣你用这些东西做什么.

这听起来很容易,我可能会使用一般Queue,但我想用BlockingCollection它,因为我不想写任何代码ManualResetEvent等.

如何适合BlockingCollection我的任务,可能你可以推荐别的东西?

.net c# multithreading .net-4.0 producer-consumer

7
推荐指数
1
解决办法
8112
查看次数

如何向StringBuilder添加一定数量的空格?

如何向StringBuilder添加一定数量(1到100之间)的空格?

StringBuilder nextLine = new StringBuilder();
string time = Util.CurrentTime;
nextLine.Append(time);
nextLine.Append(/* add (100 - time.Length) whitespaces */);
Run Code Online (Sandbox Code Playgroud)

什么是"理想"的解决方案?for循环是丑陋的.我也可以创建whitespaces[i]包含完全包含i空格的字符串的数组,但这将是相当长的硬编码数组.

c#

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

如果两个库具有完全相同的类,该怎么办?

我有这样的错误

错误8'c:\ Oleg\projects\MBClient\packages\Disruptor.1.1.0\lib \net40\Atomic.dll'和'c:\ Program Files(x86)中都存在'System.Threading.Volatile'类型\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\mscorlib.dll'C:\ Oleg\projects\MBClient\MBClient\CustomIndeces\CompositeIndex.cs 77 40 MBClient

我不知道该怎么办,因为完全限定名称并不能准确识别要使用的类.如何解决这个问题呢?

c#

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

Disruptor示例,包含1个发布者和4个并行使用者

在这个例子中/sf/answers/698624251/和这里为什么我的破坏者示例如此之慢?(在问题的最后)有1个发布者发布项目和1个消费者.

但就我而言,消费者工作要复杂得多,需要一些时间.所以我想要4个并行处理数据的消费者.

因此,例如,如果生产者产生数字:1,2,3,4,5,6,7,8,9,10,11 ..

我希望consumer1能够捕获1,5,9,... consumer2捕获2,6,10,... consumer3捕获3,7,11,... consumer4捕获4,8,12 ......(不完全是这些数字,这个想法是数据应该并行处理,我不关心在哪个消费者处理哪个数字)

并且记住这需要并行完成,因为在实际应用中,消费者工作非常昂贵.我希望消费者能够在不同的线程中执行以使用多核系统的功能.

当然我可以创建4个环形缓冲区并将1个消费者连接到1个环形缓冲区.这样我可以使用原始示例.但我觉得这不对.可能创建1个发布者(1个铃声缓冲器)和4个消费者是正确的 - 因为这是我需要的.

添加指向Google群组中非常类似问题的链接:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ

所以我们有两个选择:

  • 一个环很多消费者(每个消费者会在每次添加时"唤醒",所有消费者都应该拥有相同的WaitStrategy)
  • 许多"一个环 - 一个消费者"(每个消费者只会在它应该处理的数据上醒来.每个消费者都可以拥有自己的WaitStrategy).

c# concurrency disruptor-pattern

7
推荐指数
1
解决办法
2434
查看次数

交易申请中低延迟的原则是什么?

似乎所有主要的投资银行都在Unix(Linux,Solaris)中使用C++来实现低延迟/高频服务器应用.人们如何在交易高频权益时实现低延迟?任何书都教会如何实现这一目标?

c trading low-latency

6
推荐指数
1
解决办法
3230
查看次数

args4j:在"使用"中如何手动排序选项?

在args4j中我定义了这样的选项:

@Option(name="-host",usage="host to connect")
@Option(name="-port",usage="port of the host")
@Option(name="-idle",usage="idle")
Run Code Online (Sandbox Code Playgroud)

但是,当显示帮助时,args4j始终按字母顺序使用,以便打印

-host - host to connect
-idle - idle
-port - port to connect
Run Code Online (Sandbox Code Playgroud)

这不方便,因为我想首先显示强制选项.另外我想自己设置选项的顺序,因为一些选项(如主机和端口)应该一起使用.

如何控制args4j中的选项顺序?

我在3年前发现了同样的问题,但没有回答http://markmail.org/message/xce6vitw6miywtos

java

6
推荐指数
2
解决办法
1354
查看次数

在应用程序关闭时将信息存储到文件的正确方法

我的一个类在应用程序执行期间收集统计信息,我希望在应用程序完成时将此统计信息存储到磁盘.我从来没有在我的程序中销毁这个类,所以我试图将日志存储到文件中:

    ~Strategy()
    {
        foreach(var item in statisticItems)
        {
            log.WriteLine(item.Text);    // log is AutoFlush
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是我没有看到我期望看到的日志,并且在析构函数调用时我也无法在调试器中"捕获".

问题:

  • 为什么在调试器中我无法捕获析构函数被调用的时刻?程序完成后,是否必须为每个对象调用析构函数?
  • 我应该用什么来记录我的东西?

c#

6
推荐指数
1
解决办法
110
查看次数

是否可以创建不可变对象而不传递构造函数中的所有内容?

我想让我的课堂不变.显而易见的方法是将所有字段声明为get; private set;并初始化构造函数中的所有字段.所以客户必须在构造函数中提供所有内容 问题是,当构造函数中有大约10个或更多字段传递它们变得非常难以理解时,因为每个字段都没有标签.

例如,这很可读:

info = new StockInfo
        {
            Name = data[0] as string,
            Status = s,
            LotSize = (int)data[1],
            ISIN = data[2] as string,
            MinStep = (decimal)data[3]
        };
Run Code Online (Sandbox Code Playgroud)

与此相比:

new StockInfo(data[0] as string, s, (int) data[1], data[2] as string, (decimal) data[3])
Run Code Online (Sandbox Code Playgroud)

现在成像我有10个或更多参数.

那么如何才能使类不可变保存可读性?

我建议只在使用构造函数时使用相同的格式:

info = new StockInfo(
            data[0] as string,           // Name
            s,                           // Status
            (int)data[1],                // LotSize
            data[2] as string,           // ISIN
            (decimal)data[3]             // MinStep
       );
Run Code Online (Sandbox Code Playgroud)

你能提出更好的建议吗?

c#

6
推荐指数
3
解决办法
956
查看次数

当c#程序崩溃时怎么知道为什么?

我的程序经常因某种原因崩溃。在这种情况下,我确实看到带有“关闭”按钮的 Windows 消息。每次发生这样的事情,我真的很想知道发生了什么。

感谢社区,我已经知道如何“处理”某些情况,我在程序的开头添加了这样的代码:

    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

        TaskScheduler.UnobservedTaskException +=
        (object sender, UnobservedTaskExceptionEventArgs excArgs) =>
        {
            Log.Push(LogItemType.Error, "Exception occured. Task terminated! + " + excArgs.Exception);
            excArgs.SetObserved();
        };

    .....

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        Console.WriteLine("Error: CurrentDomain_UnhandledException entered.");
        string message = (e.ExceptionObject as Exception).Message;
        Console.WriteLine(message);
        System.Diagnostics.Trace.WriteLine(message, "Unhandled UI Exception");
        Log.Push(LogItemType.Error, message);
    }
Run Code Online (Sandbox Code Playgroud)

有时这会有所帮助。但有时程序会崩溃而没有消息。我还可以做些什么?每次程序崩溃我都想知道为什么。

upd Windows 日志包含我需要的几乎所有东西,除了最重要的东西 - 堆栈跟踪

Faulting application name: MBClient.exe, version: 1.0.0.0, time stamp: 0x50a5da1d
Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp: 0x4ec4aa8e …
Run Code Online (Sandbox Code Playgroud)

c#

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