`
mryufeng
  • 浏览: 981806 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

tail程序 c版本和lua版本大比拼

    博客分类:
  • Lua
阅读更多
闲来的时候做了个tail 程序,和*nix下的tail功能一样
Usage: ./tail -n nnnn filename

lua版本代码 20行, c版本代码173行,开发速度大概差5倍。

代码效率:
time tail -n 1000000 /var/log/haproxy.log >/dev/null 从log文件尾巴中抽取1000000行。

1.linux 版本的tail:
real    0m0.330s
user    0m0.172s
sys     0m0.156s

2. c版本的tail:
real    0m0.398s
user    0m0.156s
sys     0m0.244s

3. lua版本的tail:

real    0m40.263s
user    0m37.082s
sys     0m2.248s
速度相差将近100倍。

总结:c 还是快好多,但是开发速度太慢,排错困难,而且需要大量的技巧。
lua开发速度快,性能也足够满足一般的需要了。

这个小程序很有意思, 源码见附件,欢迎大家挑战linux下的tail性能,我花了一个晚上优化还是比它慢20-30%。

gcc编译参数:

gcc -fomit-frame-pointer -O3 -march=i686 -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wshadow -Wwrite-strings -Wcast-qual -o tail tail.c

  • tail.rar (1.8 KB)
  • 描述: tail的c和lua实现
  • 下载次数: 137
8
4
分享到:
评论
5 楼 liuming 2008-08-17  
不错,有点意思,支持一下楼主
4 楼 mryufeng 2008-08-12  
[root@test98 haproxy]# ls -lh /var/log/haproxy.log
-rw------- 1 root root 1.2G Aug 12 10:43 /var/log/haproxy.log

[root@test98 ~]# wc  -l /var/log/haproxy.log
8509062 /var/log/haproxy.log

[root@test98 ~]# ls -lh out.dat
-rw-r--r-- 1 root root 158M Jul 28 12:58 out.dat

[root@test98 ~]# wc out.dat -l
3837481 out.dat

文件太大了 不好附上。
3 楼 Sam1860 2008-08-11  
把/var/log/haproxy.log拷三份来测比较准吧
2 楼 mryufeng 2008-08-11  
算法基本一样, lua重复利用现有的c native 实现, c程序大概是lua程序的翻译
1 楼 makefile 2008-08-10  
你俩个算法都不一样比较啥啊?

相关推荐

    tail程序(windows)

    标题中的"tail程序(windows)"指的是Windows版本的`tail`命令,它模仿了Unix和Linux环境中的功能,为Windows用户提供了便捷的日志文件查看和跟踪的能力。在Windows中,这个功能通常通过第三方工具或命令行实用程序来...

    LUA5.1 脚本语言 编译执行源码

    Lua从一开始就是作为一门方便嵌入(其它应用程序)并可扩展的轻量级脚本语言来设计的,因此她一直遵从着简单、小巧、可移植、快速的原则,官方实现完全采用ANSI C编写,能以C程序库的形式嵌入到宿主程序中。Lua的每个...

    Programming in Lua(2nd Edition)

    Lua 5.1是这本书介绍的版本,这是一个经典的版本,对于Lua的语法和特性提供了详尽的描述。 书中首先介绍了Lua语言的基本概念,如“chunks”、“lexical conventions”、“global variables”以及“stand-alone ...

    我使用过的Linux命令之tailf - 跟踪日志文件/更好的tail -f版本

    `tailf.c`和`tailf原始版本.c`这两个文件很可能是`tailf`命令的源代码。通过阅读这些源代码,我们可以了解`tailf`如何实现上述高级功能,这对于学习Linux系统编程和理解I/O多路复用(如`select`或`poll`函数)等底层...

    tail程序及使用手册.zip

    Linux有一个tail命令可以实时输出文本文件内容 而windows却没有类似的命令 这回用这个工具可以在windows里可以使用tail命令...方法:解压缩,把tail.exe放到c:\windows\system32\目录下,就可以在命令行中使用tail命令了

    windows下使用tail命令-tail2win

    在Windows操作系统中,通常我们习惯于使用图形化界面来管理和查看文件,但对于习惯于Linux环境的用户来说...通过学习和熟练掌握`tail2win`,你可以在Windows环境中更好地进行日志分析、程序调试等工作,提高工作效率。

    Tail for Win32

    Tail for Win32 4.2.12.1,Linux下有一个tail程序,可以用来动态显示变化中的日志文件内容,这个是基于windows的版本,本身是来源于SourceForge的开源项目。 但是默认的版本有几个缺陷,因此我修改了以下功能: 1)...

    模仿tail的程序

    【标题】:“模仿tail的程序”是指开发一个与Unix系统中的`tail`命令类似的应用程序,但不包含 `-f` 追踪文件变化的功能。在Unix和Linux操作系统中,`tail` 命令用于查看文件的末尾部分,通常用于实时监控日志文件的...

    Lua虚拟机指令集介绍

    本文档旨在详细介绍Lua 5.1虚拟机中的各种指令,帮助开发者更好地理解Lua程序是如何被解释和执行的。 #### Lua指令基础 Lua指令通常由一个操作码和零个或多个操作数组成。操作码定义了指令的基本行为,而操作数则...

    Windows 下 tail 查看日志命令工具

    总的来说,通过在Windows环境中使用`tail`命令工具,开发者和系统管理员可以更方便地监控和分析程序日志,从而快速定位和解决问题。这个工具的引入使得Windows环境在日志分析方面与Linux环境更加接近,提升了工作...

    linux tail命令 源代码

    在进程控制方面,源代码可能包含了信号处理机制,比如对`SIGINT`(Ctrl+C)的处理,以便在用户中断时优雅地退出程序。这通常涉及到`signal()`或`sigaction()`函数的使用。 总的来说,通过研究这个个人编写的`tail`...

    java实现tail功能

    在IT行业中,尤其是在系统管理和日志分析领域,`tail`命令是一个非常常用且实用的工具。它允许用户实时查看文件的末尾,特别是在监控日志文件变化时非常有用。Java作为一种广泛使用的编程语言,也可以实现类似`tail`...

    tail -f for windows 32/64

    1. **监控日志文件**:在开发和调试过程中,如果一个程序将错误信息写入日志文件,可以使用 `tail -f log.txt` 来实时查看错误信息,而无需频繁检查整个日志文件。 2. **配置文件变动**:在某些服务或应用启动时,...

    Windows Tail | windows环境下的tail软件

    总的来说,Windows Tail是一款实用的工具,尤其对于习惯于Unix/Linux环境的开发者和管理员在Windows平台工作时,能提供很大的便利。通过阅读“yymmiinngg”分享的博文,可以学习如何在Windows环境中利用这款工具,...

    TailLog日志监控

    TailLog的主要功能在于实时跟踪和展示应用程序产生的日志文件,尤其对于那些依赖于日志输出来诊断问题的服务,如Tomcat、JBoss和MQ等,它的作用更为显著。这些服务在运行过程中,会持续生成大量日志信息,TailLog...

    windows下用的tail命令

    这通常是通过安装一些开源或者商业软件来实现的,例如利用GnuWin32、Cygwin、UnxUtils等项目提供的Windows版本的`tail`命令。这些工具将许多常用的Unix/Linux命令移植到了Windows平台,使得开发者和系统管理员可以在...

    win 平台类似linux的tail 工具

    - **GNUWin32:** 这是一个包含许多GNU工具的Windows版本集合,其中包括`tail`。你可以从官方网站下载`tail.exe`,将其添加到系统PATH环境变量中,然后在命令提示符下直接使用`tail`。 - **WinTail:** WinTail是...

Global site tag (gtag.js) - Google Analytics