编程之法-C语言应用开发与工程实践-C语言概述

浅谈计算机系统架构

计算机硬件系统

现代计算机是由运算器、控制器、存储器、输入设备、输出设备五大部分组成,它们各司其职,完成了数据的计算、存储、传输任务,整体架构如下图所示
计算机系统架构

下面是它们各个组件的功能介绍:

  • CPU:也被称为中央处理器,由运算器和控制器组成,其主要作用是用来计算数据(从内存中获取指令并执行后将结果返回给内存或者写入到磁盘)和控制其他设备(声卡显卡,鼠标键盘)协同工作。目前主流的CPU架构有基于Intel的复杂指令集的X86架构(32位和64位)和手机(ARM指令集),服务器(SPARC指令集)的精简指令集。CPU通过总线(数据总线、地址总线、控制总线)和外部进行交互,数据的计算是在CPU内部的寄存器完成的。

  • 内存:采用编址存储,其主要作用是用来作为程序的工作区,程序运行时会被加载到内存,断电后数据会丢失。32位操作系统只能最多使用4G内存(编址的数量2的32次方,已经逐渐被淘汰),64位CPU通常可以使用4G以上的内存(编址可达4G*4G,但是受限于其他组件),单台服务器的内存根据不同的用途通常是16-128G。

  • 硬盘:其主要作用是永久性存储海量(TB或者PB级别)的数据,分为机械式硬盘(HDD)(7500rpm,15000rpm)和固态硬盘(SSD)两大类,门户网站通常是两种硬盘混合使用。

  • IO设备:其主要作用是用来数据的输入输出,常见的输入设备包括鼠标键盘,常见的输出设备包含声卡,显卡,打印机等等。还有个典型输入输出设备:网卡主要是负责数据在网络上的传输。

在程序故障诊断或者做程序性能优化是时除了考虑程序自身之外还需要考虑CPU,内存,磁盘和网卡的”健康状况“。

计算机硬件的IO各层次性能汇总

组件名称 延时、带宽
CPU
Cache L1,L2,L3 0.5-15ns、20-60GB/S
内存 30-100ns、2-12GB/S
SSD硬盘 10us-1ms、50MB-2GB/S
普通硬盘 5-20ms、50-200MB/S
网卡-网卡 100us-1ms、10MB-10GB/S

从该表格中可以看出CPU延时(最低)和带宽(最高),而普通硬盘是性能最差的,根据木桶效应,在性能优化时应该优先优化磁盘。

推荐给全栈开发者(前端+后端(服务端)+大数据/云计算)的硬件配置

目前(2018/01)为止能买到的最好的硬件配置的笔记本

Windows/Linux(Ubuntu):Razer/雷蛇 灵刃专业版 RZ09-0166 GTX1080 Pro游戏笔记本电脑

主要硬件配置如下:

硬件名称 规格
屏幕 17.3英寸16:9 4K屏幕
CPU 第七代Intel i7-7820HK 3.9GHz
内存 32GB DDR4-2667MHz
硬盘 512GSSD/1TSSD
显卡 NVIDA GeForce GTX1080显卡 8G显存

推荐先安装Windows10 x64企业版,然后通过安装的VMWareWorkStation14 Pro虚拟机上安装Linux/CentOS7.3、Linux/OpenSUSE42.2和Linux/Ubuntu16.04三个常见的Linux发行版。

而如果要从事MacOS、IOS和WatchOS的应用开发,首选当然是MacBook Pro,主要硬件配置如下(内容来自于苹果官网):

硬件名称 规格
屏幕 15.4英寸
CPU 第七代Intel i7 Turbo Boost 最高可达 4.1GHz
内存 16GB 2133MHz LPDDR3内存
硬盘 512GB SSD/1T SSD
显卡 显卡Radeon Pro 560 图形处理器,配备 4GB

MacBookPro则是安装了最新的MacOS10.13,由于缺少极少数必备软件(例如RedisDesktopManager,WPS),可以通过Mac平台上的虚拟机Parallels Desktop 13 安装了Windows10以及一些Mac平台上缺失的软件。

计算机软件系统

软件的出现实现了人和计算机之间更好的交互,软件是由一系列按照特定顺序组织的指令数据组成。
计算机软件分为系统软件和应用软件两大类,如下列表中包含常见的软件及其运行平台。从交互方式上看经历了字符(命令)交互,图形界面交互和语音手势、重力感应交互的发展过程。

  • 系统软件
人机交互方式 系统名称 平台
命令行界面 Unix(Solaris,HP Unix,AIX),Linux(CentOS) 服务器
图形界面 Windows10,MacOS10.13,Linux(Ubuntu17.10) 桌面
自然交互界面(语音、手势) Android8.0,IOS11 嵌入式(手机、汽车、电视)

* 应用软件

类型 名称 平台
通讯 微信、QQ、钉钉 Windows,MacOS,Android,IOS
购物 淘宝、天猫 Android,IOS
办公 WPS,Office Windows,Mac
支付 微信支付、支付宝 Android,IOS
外卖 美团外卖、饿了么 Android,IOS
邮件 Gmail、网易邮箱 PC,Android,IOS

系统软件主要实现和底层硬件交互,给应用软件提供运行平台。操作系统、编译器等都是属于系统软件,目前主流的桌面操作系统是Windows10,Linux(Ubuntu17),MacOS10.13,主流的移动端操作系统是Android8,IOS11,主流的服务端操作系统是Linux(CentOS7.4,Ubuntu17.10),Unix(HP Unix,Solaris,AIX)。

应用软件主要是运行在PC或者是移动终端的操作系统之上,用于解决工作和生活的各种需求,例如购物(淘宝、天猫、),聊天(微信、QQ),听音乐(QQ音乐、网易云音乐),看电影(爱奇艺、腾讯视频,优酷),收发邮件(网易邮箱,Gmail)和支付(支付宝,微信支付)等等。

而应用软分为BS(Broswer/Server)和CS(Client/Server)两种架构。

其中用于BS架构的Browser端应用开发的语言有JavaScript,Server端应用开发有Java,Python,Go,PHP。

而用于CS架构的Client端(Android,IOS,PC端)的开发语言有Java,Objective-C/Swift/C++,Server端的开发语言有Java。* *

MacOS日常开发中常用的软件列表
软件名称 功能描述
Chrome、Firefox、Safari 浏览器:Web开发必备
Tower、GitHub Desktop Git版本管理、GitHub桌面客户端
XCode MacOS/IOS/WatchOS开发必备
SecureCRT Linux SSH Client
Postman Web API 测试
AndroidStudio Android APP开发必备
IntelliJ IDEA Java开发必备
Pycharm Python开发必备
WebStorm 前端开发必备
PHPStorm PHP开发必备
GoLand Go程序开发必备
DataGrip、Navicat Permium Oracle/MySQL客户端
EdrawMax 画图
StartUML 建模
PDF Expert PDF书籍查看
微信、钉钉、QQ 即时通讯必备
有道云笔记、印象笔记 笔记
简书、GitBook、Mweb 写作
TeamViewer 远程连接
ParallelsDesktop 虚拟机(Mac运行Windows)
CleanMyMac 系统管理
WireShark、Charles 网络抓包
VPN Plus 免费VPN
Axure RP8 原型
百度网盘 资源云端存储
Dash 帮助文档查看器

编程语言发展史以及应用场景

编程语言的发展史

计算机程序设计语言经历了机器语言汇编语言高级程序设计语言的演进,其特点是让程序越来越容易开发、测试和部署,在了解编程语言发展史以及使用场景前需要了解程序到底是什么?

程序是指为了完成一项特定的任务(例如听音乐,看电影,购物)而用某种编程语言(C,C++,Java)编写的指令序列,指令是计算机进行程序控制的最小单位,由操作码(例如+ -)和操作数(例如010101)组成,所有指令的集合称为计算机的指令系统,常见的指令集包括运行于PC、服务器上基于Intel处理器的X86指令集和运行于手机的ARM指令集。不同的指令集系统是不兼容的,这也就导致PC上的程序不加修改,不能到手机上运行,反之亦然。

  • 机器语言
    计算机发展的最早期,程序员编写程序采用二进制的指令(010010101)来实现的,而每种CPU都有各自不同的指令系统(SPARC/Intel X86/ARM),因此在不同的机器上使用不同的机器语言实现。其特点是性能特别高效,而面向机器编程也就意味着不能移植,需要手动处理底层硬件的差异性,而且二进制的指令难以理解和维护。

  • 汇编语言
    随着时代和计算机技术的发展,汇编语言和编译器的出现解决了机器语言需要记住非常多的二进制机器指令的难题,但是还是没有从根本上解决移植性的问题,只是将机器指令转换为易懂的英文单词,然后由编译器编译成机器指令,因为计算机终归揭底只能识别0001110100110机器指令,而且汇编语言是面向机器的,不同机器(SPARC/Intel X86/ARM)的汇编指令是不相同的。

而机器语言和汇编语言的使用场景只有在追求绝对性能的场合(例如控制导弹的发射等等)中使用

如下所示案例演示C语言嵌套汇编语言的案例

#include <stdio.h>

/*
   C语言嵌套汇编的应用案例
  * @author tony ittimeline@163.com
  * @date 2017/10/17 16:40
  * @website www.ittimeline.net

*/
void use_asm() {

    int a, b, c = 0; //初始化声明三个整数变量并赋值为0

    a = 4; 
    b = 6;

    printf("before a=%dtb=%dtc=%dn", a, b, c);

    _asm {

        //将变量a的值赋值给eax寄存器
        mov eax, a;
        //将变量b的值和寄存器eax相加
        add eax, b;
        //将相加的结果赋值给c
        mov c, eax;
    }

    printf("after  a=%dtb=%dtc=%dn", a, b, c);


}

/*主程序的入口
*     @author tony ittimeline@163.com
*     @date 2017/10/17 16:38
*     @website www.ittimeline.net
*/
int main() {

    use_asm();
    getchar();

}
  • 高级程序设计语言

    高级程序设计语言的高级之处体现在开发人员在编写程序时无需关心硬件差异只需要专注于业务模块实现即可。甚至是可以实现 一次编译,到处运行(Java通过实现不同平台的JVM,编译生成的字节码文件可以在任意的JVM上运行)。高级语言通常都需要编译器或者是解释器将源码编译或者解释执行。高级语言主要分为面向过程和面向对象两种,其中典型的面向过程语言就是C,面向对象的编程语言有Java,C++等等。

先看下目前(2018年1月)世界上主流语言的排行榜的前20位,数据来源于tiboe
tiboe

目前C语言排行第二, 同时C/C++的市场份额是超过Java的。

主流编程语言的应用场景介绍

目前主流的语言主要有Java/C/C++/C#,Pyhton,PHP,JavaScript,Swift,Objective-C,Go语言,它们拥有各种不同的使用场景。

编程语言主要是用来编写软件,而开发软件的类型主要分为系统软件和应用软件,系统软件主要有Windows,Linux(Ubuntu,CentOS,OpenSUSE),MacOS,Android,IOS,通常使用的系统软件开发语言为少量的汇编以及大量的C语言。

目前在典型的中小型互联网公司的应用软件的后台业务逻辑通常都是采用Java或者Python,C/C++/Go实现。前台展示通常包含PC,H5,Android,IOS和微信公众号、微信小程序。

信息技术发展方向

目前国内一线城市(北上广深)中的一线互联网企业主要有阿里巴巴、腾讯、百度、平安、滴滴、新美大等等,他们所涉及的领域包括电商、社交、游戏、人工智能、金融、出行、团购外卖等等。

而这些领域在技术上的实现通常会涵盖移动端、前端和服务端

移动端主要以Android,IOS为主,而开发Android App必须熟练掌握Java/Kotlin技术栈,开发IOS必须掌握Objective-C/Swift技术栈。

前端主要以HTML5+CSS3+JavaScript/ECMAScrip为基础的bootstrap,jQuery,AngularJS,VueJS,ReactJS,NodeJS,Webpack等框架的技术栈。

服务端主要以Linux(CentOSUbuntu)为主,如果想做服务端底层开发,必须熟练掌握C/C++技术栈,如果想做服务端应用层开发必须掌握Java/Python/Go技术栈。

游戏主要是Cocos2d-x和Unity3d,主要开发语言是C++和C#。

前言的方向是人工智能(Python)以及区块链(Go),物联网

大数据以及云计算因为是以海量数据为基础的,只有在巨头(Google,Amazon,Facebook,Apple,Microsoft,Alibaba,Tencent,Baidu)公司才会有用武之地

C语言概览

起源

1972年,贝尔实验室的Dennis Ritch和Ken Thompson在开发Unix操作系统时设计了C语言,该操作系统的90%以上的代码都是由C语言实现,后期的Linux,MacOS,Android,IOS都是基于Unix发展而来的。

特点

C语言作为面向过程的高级程序设计语言,能够轻松的实现自顶向下的规划、结构化编程和模块化设计,这样使得程序结构更加简洁,可扩展性强以及更加容易维护。

而且C语言有着高效功能强大(嵌套汇编)以及可移植性(标准库可移植)等优点,而且也存在着对系统平台库依赖严重

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值