标签: blocking

Google Analytics(分析) - 阻止HTML /页面呈现

我使用了" 不会阻止页面下载的更好的Google AnalyticsJavaScript "来动态加载Google Analytics,因此它不会阻止HTML /页面呈现.

但是,有时候我的HTML页面会阻止Firefox 3.0(WinXP)状态消息的呈现状态:

" 从www.google-analytics.com传输数据 "

有关如何以不会阻止HTML /页面呈现的方式加载Google AnalyticsJava的任何想法?

html javascript rendering google-analytics blocking

9
推荐指数
2
解决办法
7277
查看次数

什么是阻止功能?

这是我在提到实时处理语言时一次又一次看到的术语.在这种特殊情况下,我正在阅读node.js主页,它有这样的引用:

"在其他系统中,始终存在阻塞调用以启动事件循环."

什么是拦截电话?

asynchronous terminology real-time blocking node.js

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

在Java中实现阻塞函数调用

在Java中实现阻塞函数调用的推荐/最佳方法是什么,以后可以通过另一个线程的调用解除阻塞?

基本上我想在一个对象上有两个方法,第一个调用阻塞任何调用线程,直到第二个方法由另一个线程运行:

public class Blocker {

  /* Any thread that calls this function will get blocked */
  public static SomeResultObject blockingCall() {
     // ...      
  }

  /* when this function is called all blocked threads will continue */
  public void unblockAll() {
     // ...
  }

} 
Run Code Online (Sandbox Code Playgroud)

意图BTW不仅仅是为了获得阻塞行为,而是编写一种方法,在可以计算所需结果的某个未来点之前阻塞.

java concurrency blocking

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

中断Java DataInputStream readFully()

我有一个Java applet,它从服务器流式传输视频(MJPEG).我用C#(Windows服务)编写了一个代理服务器,放在applet和多个视频服务器之间.HTML/CSS/Js前端与Java applet一起使用.所有功能都可以正常工作(最后!!!),除了一件事.

视频服务器允许您通过REST界面播放录制的视频.剪辑完成后,服务器将打开连接,以防您想要发送倒带或搜索等命令.该剪辑在小程序中正常播放,直到结束.如果您尝试启动一个新剪辑(需要从Javscript向applet发送命令),浏览器会冻结.但是,后续使用相同连接的命令会起作用,例如播放,暂停和搜索.如果我停止Windows服务,浏览器将再次响应.

这就是我假设正在发生的事情:剪辑结束(或暂停); 不再发送数据但连接仍处于活动状态.applet正在等待下一帧的代理,但是代理正在视频服务器上等待下一帧,这不会再发送任何数据.

这是读取每个帧的while循环中的代码

byte[] img = new byte[mContentLength];
inputStream.skipBytes(headerLen);
inputStream.readFully(img);
Run Code Online (Sandbox Code Playgroud)

我需要以某种方式中断此代码.

当在HTML前端中选择新的视频片段时,我们通知applet,它在CameraStream类上调用disconnect().这就是这个功能:

// DataInputStream inputStream
// HttpURLConnection conn
public void disconnect() {
    System.out.println("disconnect called.");
    if(running) {
        running = false;
        try {
            // close the socket
            if(inputStream != null) {
                inputStream.close();
            }
            if(conn != null) {
                conn.disconnect();
            }
            inputStream = null;
            System.out.println("closed.");
        } catch(Exception ignored) {
            System.out.println("exc:" + ignored.getMessage());
            main.reportErrorFromThrowable(ignored);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了测试这个,我让一个快速剪辑播放并运行到最后.然后我选择一个新剪辑.在我的Java控制台中,我得到了输出,disconnect called.但是我没有收到后续closed.消息,也没有抓到那个通用的异常.当我停止Windows服务时,我终于得到了closed.消息,所以它似乎inputStream.close();是阻塞.

所以我想我的问题是如何阻止阻止?是readFully(img) …

java blocking datainputstream

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

Javascript中阻塞了哪些方法?

我试图confirm()在Javascript中覆盖标准方法(制作一个漂亮的UI和东西).我已经阅读了100篇"无法完成"的帖子,但我不想放弃,直到我给它一个公平的镜头.:)

所以,真正的问题当然是该confirm()方法必须阻止所有javascript执行,直到用户选择一个选项.那么,Javascript中有哪些阻塞行为的方法呢?我已经能够拿出5:

  • alert() - 不适合我,因为它显示了自己不需要的UI;
  • confirm()- 同样的问题alert();
  • 无限循环 - 即使是现代浏览器也会疯狂地吃掉CPU并显示"停止javascript"?几秒后提示;
  • XmlHttpRequest 在同步模式 - 排序,但它涉及服务器......
  • showModalDialog() - 很好,但我需要一个特定的设计,还有一些浏览器兼容性要求......

到目前为止,我最好的方法是创建一个<iframe>带有提示符(然后获取自己的javascript执行线程)并阻止,XmlHttpRequest直到用户选择了一个选项<iframe>.不幸的是,这涉及在服务器之间反复传递结果,我想让这个100%客户端.此外,它在打开对话框时占用服务器线程,并且可能存在一些适用于浏览器的特定ajax超时.

任何人都可以想到阻止执行的任何其他Javascript方法,这些方法可能(ab)用于实现所需的效果吗?

javascript synchronous blocking

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

服务器使用Flask/Redis发送事件:多个客户端如何查看流?

我有多个客户端尝试连接到服务器发送的事件流/stream.这适用于单个客户端,但尝试连接任何其他客户端会导致新客户端无限期地阻塞等待数据.如果我发送更多数据,它只会发送给第一个客户端,而不会发送给其他客户端.

这是一个小片段,说明了我的问题:

import flask
import time

app = flask.Flask(__name__)

def event_stream():
    for i in xrange(9999):
        yield "data: %d\n\n" % i
        time.sleep(1)

@app.route("/stream", methods=[ "GET" ])
def stream():
    return flask.Response(
        event_stream(),
        mimetype="text/event-stream"
    )
Run Code Online (Sandbox Code Playgroud)

然后我运行它gunicorn --worker-class=gevent -w 4 -t 99999 app:app.它适用于单个客户端,但任何其他客户端在发布时都会被阻止GET /stream.

阻止的原因是什么,我该如何解决?

我调试了一点,得到了一些奇怪的结果.如果我执行此过程,则会发生以下情况:

  • 启动客户端1(仅客户端1接收数据)
  • 启动客户端2(仅客户端1接收数据)
  • 启动客户端3(仅客户端1接收数据)
  • 启动客户端4(仅客户端1接收数据)
  • 重启客户端1(所有4个客户端突然开始同时接收数据)

python blocking flask server-sent-events

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

在连续调用多个异步任务时,异步代码似乎部分阻塞(使用HttpClient)

我一直在努力学习C#与HttpClient的异步,并遇到了一个我无法弄清楚发生了什么的问题.

我想做的事:

  • 一次发送多个HttpClient请求,并在返回后立即单独处理响应.此过程将永远循环重复(即每隔几秒发送一批新请求).对结果进行的处理不是CPU密集型的,每次响应最多只需几毫秒.
  • 在任何一个实例中,数量是5-50个帖子
  • 不关心他们回来的顺序,但每个请求/响应必须尽可能快地处理而不会阻塞.

问题:

  • 每当我一起发送请求列表时,响应似乎要花费更长的时间,但它们应该大致相同.例如:

    所用时间:67.9609毫秒所用
    时间:89.2413毫秒所用
    时间:100.2345毫秒所用
    时间:117.7308毫秒所用
    时间:127.6843毫秒所用
    时间:132.3066毫秒所用
    时间:157.3057毫秒

什么时候它们应该只有70毫米左右...这对于每一批新产品都会重复; 第一个是快速的,然后每个连续的减速.

我的代码
有3个主要部分.我已经简化了它,我可以专注于问题发生的地方(Downloader.cs是我的时间)

  • Downloader.cs这包含执行实际http查询的方法:

    public async Task<string> DownloadData(string requestString)
    {
        HttpResponseMessage response;
        response = await this.httpClient.PostAsync( url, new StringContent( requestString ));
        string returnString = await response.Content.ReadAsStringAsync();
        return returnString;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • QueryAgent.cs这初始化一个新的Downloader并包含主异步循环调用函数和它在循环中调用的异步方法.
    我需要尽快发送新的请求,具体取决于最后一组响应的结果(基本上,请求发出的速率可能会发生变化,所以我不能在结束时执行Task.delay() while循环)

    public async Task DownloadLoopAsync() 
    {
        while ( this.isLooping )
        {
            // I put this here to stop it using lots of cpu. 
            // Not sure if it is best …
    Run Code Online (Sandbox Code Playgroud)

c# asynchronous task blocking async-await

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

如何强制阻止从文件读取的线程在Rust中恢复?

因为Rust没有内置的以非阻塞方式从文件读取的能力,所以我必须生成一个读取文件的线程/dev/input/fs0以获取操纵杆事件.假设操纵杆未使用(无需读取),因此在从文件读取时阻止读取线程.

有没有办法让主线程强制读取线程的阻塞读取恢复,所以读取线程可以干净地退出?

在其他语言中,我只需在主线程中关闭该文件.这将强制阻止读取恢复.但我还没有找到在Rust中这样做的方法,因为阅读需要对文件进行可变引用.

resume blocking rust

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

Dapper QueryAsync首次阻止UI(针对Oracle服务器)?

首先,我认为第一次只是更清楚地看到阻塞的条件.对于下一次,它会以某种方式稍微阻止UI,但不会像不使用异步时那样明显.

我可以这么说,因为我可以看到使用它QueryAsync和一个简单的包装代码之间的区别,Task.Run(() => connection.Query<T>)它的工作正常,当然比QueryAsync(在UX中)要好得多.

代码很简单,就像这样:

public async Task<IEnumerable<Item>> LoadItemsAsync(){
  using(var con = new OracleConnection(connectionString)){
     var items = await con.QueryAsync<dynamic>("someQuery");
     return items.Select(e => new Item { ... });
  }
}
//in UI thread, load items like this:
var items = await LoadItemsAsync();
Run Code Online (Sandbox Code Playgroud)

代码工作正常(没有阻止UI)是这样的:

public async Task<IEnumerable<Item>> LoadItemsAsync(){
  using(var con = new OracleConnection(connectionString)){
     var items = await Task.Run(() => con.Query<dynamic>("someQuery"));
     return items.Select(e => new Item { ... });
  }
}
//in UI …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous blocking dapper

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

pygame多线程客户端套接字GUI阻塞

我想用服务器和客户端写一个gomoku游戏,终端版本运行良好,但pygame版本刚刚被阻止,无法兑换任何东西

这是游戏执行功能

  • 首先,它启动套接字连接

  • self._running = Trueinit,从服务器获取包就像{"grid":GRID(strings with 0 and 1), "x":X, "y":Y, "player":LAST_PLAYER, "next_player":CURRENT_PLAYER, "gameover":IS_GAMEOVER}

  • 在循环中:

    • 解析包
    • 检查gameover,如果是,显示有关gameover的信息并关闭套接字
    • 如果当前播放器是我,请调用on_event并让用户移动(我怀疑这一步是错误的,所以解析包步骤阻止了主线程?但是我应该怎么解决这个问题)然后将新的移动包发送到服务器
    • 如果当前的播放器不是我,那么发送一个特殊的包给我正在等待的服务器(我知道这有点愚蠢)

这就像循环一样

        while self._running:
            data = self.client_thread.reply_q.get(True)

            if data:
                self.last_player = data["player"]
                self.grid = self.grid_str_2_matrix(data["grid"])
                self.lastPosition = [data["x"], data["y"]]
                self.gomoku_board_init()

                if data["gameover"] == -1:
                    if data["next_player"] != self.player:
                        self.client_thread.cmd_q.put(ClientCommand(ClientCommand.SEND, {"wait": True}))
                        print("waiting")
                    else:
                        for event in pygame.event.get():
                            self.on_event(event)

                        print("new move")
                else:
                    print("game over")
                    self._running = False
                    if data["gameover"] == 0:
                        self.winner = 0 …
Run Code Online (Sandbox Code Playgroud)

python sockets user-interface pygame blocking

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