假设在一台多处理器机器上,有两个全局变量A和B,每个变量的大小都是一个字节,它们在内存中彼此靠近,并且有两个CPU执行以下代码。
CPU 1:
read A
calculate new value
write A
CPU 2:
read B
calculate new value
write B
仅从物理上看,如果没有任何显式锁定,我们会认为上述情况是不正确的,因为A和B可能在同一缓存行中,并且CPU 1需要读取整个缓存行,更改单个字节的值,然后再次写入该行;如果CPU 2在两者之间对缓存行进行读取-修改-写入,则对B的更新可能会丢失。(我假设A和B的更新顺序并不重要,我只关心确保两次更新都不
问题
我们正在尝试优化我们的数据服务器应用程序。它通过mysql数据库存储股票和报价。而且我们对抓取性能并不满意。
上下文
- database
- table stock : around 500 lines
- table quote : 3 000 000 to 10 000 000 lines
- one-to-many association : one stock owns n quotes
- fetching around 1000 quotes per request
- there is an index on (stockId,da
我有一个漂浮的问题
mysql Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (i686) using readline 6.1
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"
一个像这样的结果
mysql> SELECT `offers`.* FROM `offers` WHERE (created_at > '2011-12-12 07:00:00&
我一直在测试Windows SRW锁的性能,发现了一个奇怪的问题。我有以下测试循环:
for (int i = 0; i < 100000000; ++i)
{
AcquireSRWLockShared (&g_srwLock);
ReleaseSRWLockShared (&g_srwLock);
}
当我用一个线程运行它时,大约需要1.5秒,当我同时用两个线程运行它时,大约需要2.9秒(每个线程)。好的,然后我有下面的循环:
for (int i = 0; i < 100000000; ++i)
{
_InterlockedIncreme