zoukankan      html  css  js  c++  java
  • 写日志函数和持续优化

    首先看以下的函数

    <span style="font-size:18px;">void writelog(char* file, char* msg)
    {
    	FILE*fp=NULL; 
    
    	int nDataLen = strlen(msg);
    
    	fp=fopen(file,"ab+");//仅仅供读取 
    	if(fp!=NULL)
    	{
    		fwrite(msg, nDataLen, 1, fp);
            
    	}
             fclose(fp);//关闭文件
    }</span>

    这个有什么问题呢?当fp为空的时候。是不是也会运行fclose(fp)?

    改动例如以下:

    <span style="font-size:18px;">void writelog(char* file, char* msg)
    {
    	FILE*fp=NULL; 
    
    	int nDataLen = strlen(msg);
    
    	fp=fopen(file,"ab+");//仅仅供读取 
    	if(fp!=NULL)
    	{
    		fwrite(msg, nDataLen, 1, fp);
            fclose(fp);//关闭文件
    	}
    }</span>

    这样是不是就没问题了呢?

    当多线程中调用这个日志函数的时候,会不会有问题?

    所以有一种方法就是加锁,但这样效率可能会低一些。

    第二种方法就是用一个线程来接收其它线程的写日志的消息。有一个线程来专门写日志。

    这样工作线程不会堵塞,可提高并发效率。

     

    编程和设计的过程,就是一个逐步完好的过程,没有人一開始会想的非常全面,也没有绝对的错误的代码和设计。

    假设有明显的功能错误。在设计过程中。就会改正。就比方最開始的那个函数,fp为空的概率有多少?所以一般不会出错。当日志函数仅仅在单线程中使用。那考虑加锁和多线程消息也是多余。所以。要看应用场景。

    程序猿都非常反感需求的变化。需求,就是应用场景。

    仅仅有在需求确认了,才干够设计出相对匹配的方案出来。不一定是完美的,但肯定是在综合各种因素的情况下,是最优的。

    周期是要考虑的,成本是要考虑的。

     

     转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/38310669



     

  • 相关阅读:
    POJ3345 Bribing FIPA(树形DP)
    POJ3294 Life Forms(二分+后缀数组)
    ZOJ1027 Travelling Fee(DP+SPFA)
    POJ2955 Brackets(区间DP)
    POJ1655 Balancing Act(树的重心)
    POJ2774 Long Long Message(后缀数组)
    URAL1297 Palindrome(后缀数组)
    SPOJ705 SUBST1
    POJ3261 Milk Patterns(二分+后缀数组)
    POJ1743 Musical Theme(二分+后缀数组)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5095802.html
Copyright © 2011-2022 走看看