[ 
https://issues.apache.org/jira/browse/THRIFT-1815?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13541961#comment-13541961
 ] 

Andrew Gaul edited comment on THRIFT-1815 at 1/2/13 1:38 AM:
-------------------------------------------------------------

1) I compile 11 .thrift files consisting of 3,500 lines, resulting in 120,000 
lines of .java source.  Compiling on eCryptfs, I measure 3.480s before my patch 
and 0.389s after.  I see more dramatic results when compiling on a proprietary 
FUSE-based network filesystem, on the order of minutes.

2) If someone introduces a spurious "using namespace std" they will encounter a 
compilation error due to a duplicated endl symbol.

Other approaches include {noformat}sed -i 's/endl/"\\n"/g' 
compiler/cpp/src/generate/*{noformat} or implementing an ofstream variant which 
handles std::endl differently.
                
      was (Author: gaul):
    1) I compile 3,500 lines across 11 .thrift files, resulting in 120,000 
lines of .java source.  Compiling on eCryptfs, I measure 3.480s before my patch 
and 0.389s after.  I see more dramatic results when compiling on a proprietary 
FUSE-based network filesystem, on the order of minutes.

2) If someone introduces a spurious "using namespace std" they will encounter a 
compilation error due to a duplicated endl symbol.

Other approaches include {noformat}sed -i 's/endl/"\\n"/g' 
compiler/cpp/src/generate/*{noformat} or implementing an ofstream variant which 
handles std::endl differently.
                  
> Code generators line buffer output
> ----------------------------------
>
>                 Key: THRIFT-1815
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1815
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Compiler (General)
>    Affects Versions: 0.9
>            Reporter: Andrew Gaul
>              Labels: performance
>         Attachments: thrift_std_endl.patch
>
>
> This results in slow performance on FUSE- and network-based filesystems, 
> e.g., eCryptfs.  std::ostream << std::endl emits a newline and flushes 
> buffers to the kernel[1], yielding excessive system calls.  Instead, emit 
> "\n" which does the equivalent without the flush[2].  The attached patch 
> accomplishes this while minimizing code churn by removing "using namespace 
> std" and introducing a static variable endl.
> [1] http://www.cplusplus.com/reference/ios/endl/
> [2] 
> http://stackoverflow.com/questions/5492380/what-is-the-c-iostream-endl-fiasco

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to