平安夜,实验室哥们买了一袋苹果分了我一个,打打球写写代码看看火车票然后就这么过了
当然不能少的也还是记录下今天搞到哪里了
反正昨晚的那些传来传去的noncopyable的事情总算大概弄清了,现在把架构都写得清晰了很多,每个client也都有自己的id,并且简化了原本的很多的cout的输出,统一地输出一些有用的信息,在客户端和服务端都是如此,但是今天打球又把手指给搞到了真实蛋疼为什么大冷天就那么容易受伤了可是明明我都已经很注意了,主要是下午看到有十几个人一起打本来昨天打了全场就累死了的但是金堂俺还是被他们诱惑去了
好吧,然后反正现在清晰地能看到客户端那边的每一个线程都干了些什么进行到什么步骤,然后对应的服务端那边又是怎么回应的到了哪个阶段的,但是现在发现的一个最重大的问题就是打开文件的时候哪怕是只读的方式来都是不允许两个线程同时打开的,这个就要涉及到文件锁的问题了,这个以前都是纸上谈兵没有机会好好弄过,明天这算是一个很大的坎也会死一个很重要的问题搞得通就好搞不通就去死,好吧,发现每天晚上睡觉去都会清晰地留下一个比较重要的问题去明天解决,希望也是一个5:59的动力吧这几天一直都是7点半才开始干活这个节奏各种作死。
呵呵,但是更有趣的是后面还要考试呢,计算理论和数据库是最主要的,31号还来个英语口试呢,呵呵,好害怕
以上写于12.24平安夜,Merry Christams
-----------------------------------------------------------------------------------------------
圣诞节早上,果然又是恍然大悟,续昨晚的问题,既然都是在file handler生成的过程中出现了独占的锁访问问题,那么其实就是createfile这个系统的自带库函数的参数设定问题了吧?微软不可能那么傻逼只能独占访问吧?好吧,我发现经常习惯性地查看msdn是非常必要的,看了下msdn的关于creatfile的文档:http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
才发现,第三个函数就是设定共享模式的函数,而例子那里用的是“0”,就是代表着独占了,还有shared read 和 shared write 的模式的,后面那个听起来好像很腻害很危险很风骚的样子,下次再试试吧,然后现在还暂时没测试,看到这个模式的设定就顿时觉得应该这个问题已经成功hacked了,而昨晚除此之外的应该也很清晰了关于多线程的,好先测试下吧。
测试通过了,在看msdn关于creating的文档还有相关的一些东西,看到了就记录下来,一些觉得可能有用的点:
在倒数第二个参数里面,就是本来例程里面默认的是:FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,这里有一些可选的参数可能可以提高性能,FILE_FLAG_SEQUENTIAL_SCAN,FILE_FLAG_WRITE_THROUGH
其中这个是msdn对于sequential scan的原话:Specifying the FILE_FLAG_SEQUENTIAL_SCAN flag can increase performance for applications that read large files using sequential access. Performance gains can be even more noticeable for applications that read large files mostly sequentially, but occasionally skip forward over small ranges of bytes. If an application moves the file pointer for random access, optimum caching performance most likely will not occur. However, correct operation is still guaranteed.
When an application creates a file across a network, it is better to use GENERIC_READ | GENERIC_WRITE
fordwDesiredAccess than to use GENERIC_WRITE alone. The resulting code is faster, because the redirector can use the cache manager and send fewer SMBs with more data. This combination also avoids an issue where writing to a file across a network can occasionally return ERROR_ACCESS_DENIED.