小编Sel*_*bor的帖子

Erlang 如何睡觉(晚上?)

我想在 Erlang 服务器上每隔几个小时运行一次小型清理过程。

我知道计时器模块。我在教程中看到一个示例,使用链式计时器:睡眠命令来等待几天后发生的事件,我觉得这很奇怪。我知道 Erlang 进程与其他语言中的进程相比是独一无二的,但是进程/线程一次休眠数天、数周甚至数月的想法似乎很奇怪。

因此,我开始了解睡眠的具体作用。我发现的最接近的是一篇博客文章,提到睡眠是通过接收超时实现的,但这仍然留下了问题:

这些睡眠/类似睡眠的功能实际上有什么作用?

我的进程在休眠时是否占用资源?数千个休眠进程是否会使用同样多的资源,例如,数千个进程为不执行任何操作的递归调用提供服务?在进程内反复休眠或长时间休眠是否会造成性能损失?VM是否不断消耗资源来查看结束进程睡眠的条件是否成立?

作为旁注,如果有人能评论一下是否有比睡觉更好的方法,一次暂停几个小时或几天,我将不胜感激。

erlang multithreading timer scheduled-tasks erlang-otp

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

为什么Main不归?

之前我已经注意到了这种行为,这次我想问一个问题:

我有一个简单的"概念证明"程序,它产生一些线程,等待它们做一些工作,然后退出.

但是Main除非我调用server.Close()(关闭套接字并结束服务器线程的执行),否则不返回:

private void Run()
{
    var server = StartServer(); //Starts a thread in charge of listening on a socket

    _serverResetEvent.WaitOne();

    ThriftProtocolAccessManager protocolManager = CreateProtocolManager(); //Doesn't create any threads

    const int numTestThreads = 10;

    Barrier testCompletedBarrier;

    Thread[] testThreads = GenerateTestThreads(numTestThreads, protocolManager, out testCompletedBarrier); //Creates x threads, where x is numTestThreads

    testThreads
        .AsParallel()
        .ForAll(thread => thread.Start()); //Start them "at the same time" (For testing purposes 

    testCompletedBarrier.SignalAndWait(); //Barrier has participants equal to numTestThreads + 1 and each …
Run Code Online (Sandbox Code Playgroud)

c# multithreading garbage-collection deadlock terminate

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

RxJava 中的指数退避

我有一个 API,它需要Observable触发一个事件。

我想返回一个,如果检测到互联网连接,则每秒Observable发出一个值,如果没有连接,则延迟时间。defaultDelaynumberOfFailedAttempts^2

我尝试了很多不同的风格,我遇到的最大问题是retryWhen'sobservable 只评估一次:

Observable
    .interval(defaultDelay,TimeUnit.MILLISECONDS)
    .observeOn(Schedulers.io())
    .repeatWhen((observable) ->
         observable.concatMap(repeatObservable -> {
             if(internetConnectionDetector.isInternetConnected()){
                 consecutiveRetries = 0;
                 return observable;
             } else {
                 consecutiveRetries++;
                 int backoffDelay = (int)Math.pow(consecutiveRetries,2);
                 return observable.delay(backoffDelay, TimeUnit.SECONDS);
                }
         }).onBackpressureDrop())
    .onBackpressureDrop();
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做我想做的事情吗?我发现了一个相关的问题(现在无法找到它搜索),但所采取的方法似乎不适用于动态值。

java java-8 rx-java exponential-backoff

3
推荐指数
1
解决办法
5560
查看次数

Scene Builder 2.0未启动

以前似乎有人遇到过类似的问题.

在全新安装的Windows 8.1中,我安装了Netbeans,最新的JDK和JavaFX Scene Builder,但是Scene Builder没有运行.

通常问题是Scene Builder窗口没有出现/打开文件,但是现在我无法让它在第一次运行时打开.没有错误消息,并从命令行运行它不会返回任何内容.该程序似乎没有出现在任务管理器中,并且任务栏上没有显示图标.

我也安装了BitDefender(就像其他问题中的人一样),但禁用它似乎没有帮助.

java scenebuilder javafx-8

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

为什么我的Erlang应用程序崩溃了?

我正在构建一个简单的erlang应用程序,并且对环境很新,所以我很难理解我遇到的一些错误.我不确定我的问题的根源在哪里,所以如果有任何相关内容我不发布,请告诉我:

我正在运行的模块的来源:

  -module(basilisk_server).
  -author("Oak").

  -export([start_link/2,start/0,start/1,start/2, stop/1]).
  -behaviour(application).
  -record(options,{
    port = 6890,
    server_opts = []
  }).
  -define(LocalIP,"192.168.64.128").
  start()->
    start([]).
  start(Args)->
    #options{port = Port, server_opts = ServerOpts}  = parse_args(Args),
    spawn(
      fun() ->
        start_link(Port, ServerOpts),
        receive after infinity -> ok end
      end)
  .
  start(_StartType, Args) ->
    start(Args).

  parse_args(Args) -> parse_args(Args, #options{}).
  parse_args([], Opts) -> Opts;
  parse_args([Head | Rest], Opts) ->
    NewOpts =
      case catch list_to_integer(Head) of
        Port when is_integer(Port) ->
          Opts#options{port = Port};
        _Else ->
          case Head of
            "framed" ->
              Opts#options{server_opts = [{framed, …
Run Code Online (Sandbox Code Playgroud)

erlang thrift erlang-otp erl rebar

0
推荐指数
1
解决办法
148
查看次数