我想知道是否有办法对数据库进行异步调用?
例如,假设我有一个需要很长时间才能处理的大请求,我想发送请求并在请求返回值时接收通知(通过传递监听器/回调或其他东西).我不想阻止等待数据库回答.
我不认为使用线程池是一种解决方案,因为它不能扩展,在繁重的并发请求的情况下,这将产生大量的线程.
我们正面临网络服务器的这种问题,我们通过使用select/poll/epoll系统调用找到了解决方案,以避免每个连接有一个线程.我只是想知道如何在数据库请求中使用类似的功能?
注意:我知道使用FixedThreadPool可能是一个很好的解决办法,但我很惊讶没有人开发出一个真正异步的系统(没有使用额外的线程).
**更新**
由于缺乏真正实用的解决方案,我决定自己创建一个库(finagle的一部分):finagle-mysql.它基本上解码/解码mysql请求/响应,并在引擎盖下使用Finagle/Netty.即使有大量的连接,它也能很好地扩展.
我想打开一个小视频文件并映射内存中的每个帧(以应用一些自定义过滤器).我不想处理视频编解码器,我宁愿让库为我处理.
我尝试使用SampleGrabber过滤器使用Direct Show(使用此示例http://msdn.microsoft.com/en-us/library/ms787867(VS.85).aspx),但我只设法抓住一些帧(不是每一帧!).我是视频软件编程的新手,也许我没有使用最好的库,或者我做错了.
我已经粘贴了我的一部分代码(主要是来自msdn示例的修改后的复制/粘贴),遗憾的是它没有像预期的那样抓住25个第一帧...
[...]
hr = pGrabber->SetOneShot(TRUE);
hr = pGrabber->SetBufferSamples(TRUE);
pControl->Run(); // Run the graph.
pEvent->WaitForCompletion(INFINITE, &evCode); // Wait till it's done.
// Find the required buffer size.
long cbBuffer = 0;
hr = pGrabber->GetCurrentBuffer(&cbBuffer, NULL);
for( int i = 0 ; i < 25 ; ++i )
{
pControl->Run(); // Run the graph.
pEvent->WaitForCompletion(INFINITE, &evCode); // Wait till it's done.
char *pBuffer = new char[cbBuffer];
hr = pGrabber->GetCurrentBuffer(&cbBuffer, (long*)pBuffer);
AM_MEDIA_TYPE mt;
hr = pGrabber->GetConnectedMediaType(&mt);
VIDEOINFOHEADER *pVih; …Run Code Online (Sandbox Code Playgroud) 我写了一些应用程序,而不是大量使用网络,我想通过慢速网络测试它.我正在寻找一种模拟这种连接的工具.
我只对Windows工具感兴趣.
我目前正在尝试优化我的网站,该网站运行在google的appengine上.这不是一件容易的事,因为我没有使用任何强大的工具.
有没有人有为此目的优化python代码的经验?你有没有找到一个好的python profiler?
我正在用scala写一个程序,它调用:
Runtime.getRuntime().exec( "svn ..." )
Run Code Online (Sandbox Code Playgroud)
我想检查命令行中是否有"svn"可用(即可以在PATH中访问).我怎样才能做到这一点 ?
PS:我的程序设计用于在Windows上运行
我目前正在尝试将单线程程序传递给多线程.该软件大量使用"refCounted"对象,这导致多线程中的一些问题.我正在寻找一些可能解决我的问题的设计模式.
主要问题是线程之间的对象删除,通常删除只减少引用计数,当refcount等于零时,则删除对象.这在monothread程序中运行良好,并且可以通过大对象的副本实现一些很好的性能提升.
但是,在多线程中,两个线程可能希望同时删除同一个对象,因为该对象受互斥锁保护,只有一个线程删除该对象并阻塞另一个.但是当它释放互斥锁时,另一个线程继续执行无效(释放对象),这会导致内存损坏.
以下是此类RefCountedObject的示例
class RefCountedObject
{
public:
RefCountedObject()
: _refCount( new U32(1) )
{}
RefCountedObject( const RefCountedObject& obj )
: _refCount( obj._refCount )
{
ACE_Guard< ACE_Mutex > guard( _refCountMutex );
++(*_refCount);
}
~RefCountedObject()
{
Destroy();
}
RefCountedObject& operator=( const RefCountedObject& obj )
{
if( this != &obj )
{
Destroy();
ACE_Guard< ACE_Mutex > guard( _refCountMutex );
_refCount = obj._refCount;
++(*_refCount);
}
return *this;
}
private:
void Destroy()
{
ACE_Guard< ACE_Mutex > guard( _refCountMutex ); // thread2 are waiting here …Run Code Online (Sandbox Code Playgroud) 我必须开发一个应用程序来解析日志文件并将特定数据发送到服务器。它必须在 Linux 和 Windows 上运行。
当我想测试日志滚动系统(将 .1 附加到名称后会创建一个具有相同名称的新系统)时,就会出现问题。在 Windows 上(尚未在 Linux 上测试过)我无法重命名用 std::ifstream() 打开的文件(独占访问?),即使我在“输入模式”(ios::in)下打开它.
是否有跨平台的方式以非独占方式打开文件?
我要为我的校友小组管理一个由我的ISV主持的小网站.该网址类似于www.myIsv.com/myWebSite/,它非常丑陋且非常易于销售.网络服务器的主要管理员已注册域名www.mysmallwebsite.com,并将index.html与此内容放在一起:
<html>
<head>
<title>www.mysmallwebsite.com</title>
</head>
<frameset>
<frame src="http://www.myIsv.com/myWebSite/" name="redir">
<noframes>
<p>Original location:
<a href="www.myIsv.com/myWebSite/">http://www.myIsv.com/myWebSite/</a>
</p>
</noframes>
</frameset>
</html>
Run Code Online (Sandbox Code Playgroud)
它工作正常,但PHP会话变量等功能不再起作用!有人建议纠正吗?
编辑:这在IE和Firefox上都不起作用(没有插件)
谢谢
我正在寻找一个非常简单的工具来监控我所有应用程序的带宽.不需要像流量间谍这样的额外功能,我只是对带宽感兴趣.
我已经知道Wireshark(这很棒),但我正在寻找的东西更像是TcpView(来自Sysinternals的强大工具),带有当前的带宽指示.
PS:我只对Windows工具感兴趣
c++ ×3
windows ×3
java ×2
networking ×2
scala ×2
asynchronous ×1
bandwidth ×1
filesystems ×1
jdbc ×1
linux ×1
nonblocking ×1
php ×1
python ×1
refcounting ×1
runtime ×1
session ×1
throttling ×1
video ×1