当Java程序调用System.out.println()或Scala程序调用println()时,线程是否阻塞?
我正在编写一个带有大量子任务的Scala程序.每个子任务都在Future中执行.建议actor和future内的代码不会阻塞,以便后续任务也不必等待.但我想在控制台上打印很多.
如果是阻塞操作:我可以做些什么来优化性能?
当然,我可以尝试减少输出量或收集StringBuilder中的一些输出并将它们一起打印,这样可以减少输出操作的数量.
我正在阅读这个问题(如何在C#中创建一个简单的代理?),这几乎是我的意愿.
我只想要开发ac#app,例如,监控Firefox,IE等,并记录所有导航页面.根据访问过的页面,我想阻止该网站(如父母过滤器).
代码片段/样本很好,但如果您能告诉我使用该类的方向,我将不胜感激.:-)
我正在尝试优化一些慢速网页,我的猜测是问题与SQL阻塞有关(似乎不是Web服务器或数据库服务器上的CPU或I/O利用率问题).找出哪些查询被阻止以及哪些查询正在执行阻止的最快方法是什么?
我正在调用Process.Start,但它会阻止当前线程.
pInfo = new ProcessStartInfo("C:\\Windows\\notepad.exe");
// Start process
mProcess = new Process();
mProcess.StartInfo = pInfo;
if (mProcess.Start() == false) {
Trace.TraceError("Unable to run process {0}.");
}
Run Code Online (Sandbox Code Playgroud)
即使进程关闭,代码也不再响应.
但是Process.Start真的应该阻止吗?这是怎么回事?
(流程正确启动)
using System;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;
namespace Test
{
class Test
{
[STAThread]
public static void Main()
{
Thread ServerThread = new Thread(AccepterThread);
ServerThread.Start();
Console.WriteLine (" --- Press ENTER to stop service ---");
while (Console.Read() < 0) { Application.DoEvents(); }
Console.WriteLine("Done.");
}
public static void AccepterThread(object data)
{
bool …Run Code Online (Sandbox Code Playgroud) 我有一个托管在CMS(Squarespace)上的照片库页面,它有一些自己的脚本,可以异步加载缩略图.
然而,实际的大图像没有预加载,所以我决定将自己的脚本添加到混合中,只是让浏览器将这些较大的图像加载到后台的缓存中,如下所示:
(function($) {
var cache = [];
// Arguments are image paths relative to the current page.
$.preLoadImages = function() {
var args_len = arguments.length;
for (var i = args_len; i--;) {
var cacheImage = document.createElement('img');
cacheImage.src = arguments[i];
cache.push(cacheImage);
}
}
})(jQuery)
$(window).load(function(){
$.preLoadImages(
"/picture/1.jpg",
"/picture/2.jpg", //etc.
);
});
Run Code Online (Sandbox Code Playgroud)
我将我的代码放在$(window).load()中,因为这是一个后台脚本,它甚至根本不运行,它只是为了提高性能.
但是,我认为这个脚本以某种方式阻止了CMS自己的缩略图预加载脚本.
我对吗?最重要的是,有没有办法规定我的脚本只在页面上的所有其他脚本运行后运行?
干杯
乍一看似乎是一个好主意让硬盘自己写入RAM,没有CPU指令复制数据,特别是考虑到异步网络的成功.但维基百科关于直接内存访问(DMA)的文章指出:
使用DMA,CPU可以从这种开销中解脱出来,并且可以在数据传输期间执行有用的任务(尽管CPU总线会被DMA 部分阻止).
我不明白公交线路是如何"部分阻挡"的.据推测,当时一个设备可以访问内存,然后看起来CPU实际上没有什么有用的工作.它会在第一次尝试读取未缓存的内存时被阻止,我预计在2 mb缓存的情况下会非常快.
释放CPU来执行其他任务的目标似乎是无偿的.硬盘DMA是否会在实践中促进任何性能提升?
我有一个Blackberry应用程序,当在一些具有触摸支持的仿真器中运行时(例如:9500,9520,9530,9550),终止于:
"应用程序没有响应;进程XPTO终止"
使用日志,我发现应用程序似乎停止在我异步发出HTTP请求的类中:类似于:
public class LoadingFullScreen extends FullScreen implements Runnable {
private Thread actionThread = null;
protected void onDisplay() {
actionThread = new Thread(this);
actionThread.start();
}
protected void onUndisplay() {
if(actionThread != null && actionThread.isAlive()) {
actionThread.interrupt();
}
}
public void run() {
//make http requests - this is done successfully
synchronized(Application.getEventLock()) {
Screen active = UiApplication.getUiApplication().getActiveScreen();
if (active instanceof LoadingFullScreen) {
Logger.debug("LoadingFullScreen popping screen"); //this appears in logs
UiApplication.getUiApplication().popScreen(active);
Logger.debug("LoadingFullScreen screen popped"); //this never appears in logs
}
} …Run Code Online (Sandbox Code Playgroud) 我一直在研究一款适用于Android的蓝牙应用程序,我刚刚发现了这个问题.当我mySocket.connect();在我的蓝牙服务类中进行预处理时,它偶尔会无限期地阻塞.我阅读了文档,BluetoothSocket.close()并说明了以下内容:
立即关闭此套接字,并释放所有相关资源.
导致其他线程中此套接字上的被阻止调用立即抛出IOException.
但是,这对我来说似乎不起作用.这是我设置计时器然后尝试连接的代码.
//code for starting timer and connecting
MyRunnable runner = new MyRunnable(mySocket);
Thread countThread = new Thread(runner);
countThread.start();
mySocket.connect();
runner.setSocketConnected();
//code for MyRunnable
private class MyRunnable implements Runnable{
private boolean didSocketConnect = false;
private boolean socketConnectFailed = false;
private BluetoothSocket socket;
public MyRunnable(BluetoothSocket socket){
this.socket = socket;
}
public void run() {
long start = System.currentTimeMillis();
while(ESTABLISH_TIMEOUT + start >= System.currentTimeMillis() && !didSocketConnect && !socketConnectFailed){
}
if(!didSocketConnect && !socketConnectFailed){
Log.v(TAG,"Reached Timeout and socket …Run Code Online (Sandbox Code Playgroud) 我有一个生产设置,用于运行芹菜工作者对远程服务和存储结果发出POST/GET请求,它每15分钟处理大约20k个任务的负载.
问题是工人无缘无故麻木,没有错误,没有警告.
我也试过添加多处理,结果相同.
在日志中,我看到执行任务的时间增加,就像在s中成功一样
有关更多详细信息,请访问https://github.com/celery/celery/issues/2621
threading.Event()在 C 中,pthread 条件变量与python 中的变量具有相同的用途。我的问题是,threading.Event()变量是否会遭受与 pthread 条件变量相同的虚假唤醒问题?
blocking ×10
asynchronous ×2
c# ×2
python ×2
android ×1
blackberry ×1
bluetooth ×1
celery ×1
cpu ×1
gevent ×1
http ×1
io ×1
java ×1
javascript ×1
jquery ×1
memory ×1
monitoring ×1
nonblocking ×1
optimization ×1
performance ×1
preloading ×1
process ×1
scala ×1
sockets ×1
sql ×1
sql-server ×1
sta ×1
system ×1