当前位置:  技术问答>linux和unix

system call VS.library call

    来源: 互联网  发布时间:2015-08-07

    本文导语:  I had heard a lecture by a guy from Bell lab, he said system call is more expensive than library call. 我对Unix不是很熟悉,在我的印象中,library call应该更加expensive,应为system call 是kernel直接和hardware交互,而library call...

I had heard a lecture by a guy from Bell lab, he said system call is more expensive than library call.

我对Unix不是很熟悉,在我的印象中,library call应该更加expensive,应为system call 是kernel直接和hardware交互,而library call封装了system call(Win API 给的我感觉比较深)

1. system call 会使得process从user mode ---> kernel mode.是这个原因吗?他说了什么lock/unlock我不是很明白。
2. library call 不是象我理解的封装了system call?

|
介个...非要较真的话,我说两者没什么可比的,先不着急,听我说:

首先要说明,并非所有库函数都直接或间接的依赖于系统调用,尽管大多数的确如此。
然后嘛,要知道系统调用的数量很少(相比库函数而言),每个的功能也很集中不像库函数那么复杂。可以肯定地说,如果有一个库函数是基于系统调用实现的,并且其功能于系统调用完全一样,那么它一定没有系统调用的效率高!原因正如你想的那样。
但是有这么没用的库函数吗?即使功能很接近,至少库函数会有一个更友好的接口。大多数情况是,库函数针对用户的需要量身打造,它通过多个系统调用实现,试想如果你正有这样的需求,是自己组合系统调用和是使用现成的函数?我选库函数,至少它更安全。

所以我说它们没得比,实现的功能都不一样,怎么比啊?

事实上很多书上有这样的比较数据,主要是在IO方面,但是...要挑战权威啦,不说了,呵呵。最后说一句,不是搞理论研究的话,实在不用操那么多心,就像讨论c+inline assembly一样,unix源代码里采用了多少行啊

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.sound.midi类shortmessage的类成员方法: system_reset定义及介绍
  • System.exit(0);和System.exit(1)有什么区别?
  • java命名空间javax.swing.text.html.parser接口dtdconstants的类成员方法: system定义及介绍
  • 请问System.out.print和System.out.printIn有什么不同?
  • java命名空间javax.sound.midi类sysexmessage的类成员方法: system_exclusive定义及介绍
  • 谁有 novell 3.12 的SYSTEM_1 和 SYSTEM_2 的软盘内容吗?[分不够可增加]
  • java命名空间javax.xml.transform类outputkeys成员方法: doctype_system定义参考
  • POSIX.1要求system忽略SIGINT和SITQUIT,阻塞SIGCHLD,求解释。UNIX环境高级编程 system函数
  • java命名空间javax.swing类jfilechooser的类成员方法: file_system_view_changed_property定义及介绍
  • 请问java.lang.System是一个类吧??那么System.out.print()中的out充当什么角色呢?还是类???
  • java命名空间java.lang.management类managementfactory的类成员方法: operating_system_mxbean_name定义及介绍
  • 现在用 System.exit(0) or System.exit(1) 来退出弹出窗口,但是连父窗口一起关闭(紧急求解)
  • java命名空间java.lang类system的类成员方法: in定义及介绍
  • System.out.println() 和System.err.println()有什么区别?THANKS
  • java命名空间javax.print.attribute.standard类jobstatereason的类成员方法: aborted_by_system定义及介绍
  • 在线等,请问system函数返回值是什么值,怎么判断system运行是否成功?
  • java命名空间java.lang类system的类成员方法: gc定义及介绍
  • 深入解析System.load 与 System.loadLibrary
  • java命名空间java.lang类system的类成员方法: console定义及介绍
  • catch异常的时候用System.out.print()和用System.err.print()来输出有什么区别啊?
  • java命名空间java.lang类system的类成员方法: runfinalization定义及介绍
  • system(command) 与 command 的区别


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3