当前位置:编程学习 > wap >>

多核时代的移动开发讨论JAVA,C#,还是F#

前一段时代发贴讨论了XNA与DIRECTX的各自前途问题。看到很多朋友的回贴还是很有启发。其实这样的讨论意义并不是很大,因为我之前就是做DIRECTX的后来转XNA很简单。因为建模的方法都一样,VIEW,PRJECTION和WORLD的概念也没有什么变化。
这一段仔细研究了并行计算的相关话题,我感觉由于移动平台的特殊性(通常只有一个程序为用户当前使用的程序),所以在移动平台上并行优化比桌面上更为重要。感觉就像面向对向的思想及潮流不可逆转一样。函数式语言的时代也会在不久的将来到来。
推荐一下我的这篇博客,http://blog.csdn.net/beyondma/article/details/8273412
但是不可否认目前还是OBJECT -C,JAVA,及C#等面向对象的编程语言是主流。但是就是我博客中所述一样,这些语言在多核优化上全部都有先天不足。了解函数式语言的思想会帮助移动平台的程序员掌握到整个潮流。
以上个人观点,欢迎讨论。
--------------------编程问答-------------------- 看了下 LZ 的博客,写得不错! --------------------编程问答-------------------- 厉害厉害。。。。 --------------------编程问答-------------------- c#是2000年的东西了,在那个时候基本还是单核cpu,而f#是2005年的,会考虑多核状况是自然的说。(两个都从发布时间来说)
至于c#对并行计算的先天不足,我觉得微软在.net4.0乃至4.5都做了很大的工作,特别是4.5多出的关键字——async和await。

int[] a = new int[4] { 1, 2, 3, 4 };
int[] b = new int[4];
Parallel.For(0, a.Length, i =>
{
      b[i] = a[i] + 1;
});

至于博文里的那个例子,c#也是能写的,不过就没f#那么简洁了。^-^
java的话就不太清楚。
我个人觉得以后应该两种思想会融为一体,面向对象用作封装、接口通讯,函数式则实现内部的方法。 --------------------编程问答-------------------- 不错 --------------------编程问答-------------------- 不错 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 不错,赞一个; --------------------编程问答-------------------- 感谢楼主分享 --------------------编程问答-------------------- 谢谢楼主分享 --------------------编程问答-------------------- 多核处理器的电脑上,其实大多数程序并不使用到多核。以后移动设备性能强了也可以,单核运行足够了。 --------------------编程问答-------------------- 微软在.NET4.0就已经加入了并行计算了

  --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 支持持楼主。。。支持 --------------------编程问答-------------------- 谢楼主分享,不错 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- .net4.0的parallel还是很好用的 --------------------编程问答-------------------- 开眼了,学习了。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 厉害,受教了
--------------------编程问答-------------------- 学习学习,真的不错
--------------------编程问答-------------------- 不错。 --------------------编程问答-------------------- 函数式语言。。。 --------------------编程问答-------------------- 学习学习!新手! --------------------编程问答-------------------- 热舞干扰器我国  --------------------编程问答-------------------- 学习了~。。。。。 --------------------编程问答-------------------- 谢谢楼主。涨姿势了。 --------------------编程问答-------------------- 不错,很受用了,谢谢楼主 --------------------编程问答-------------------- 先收藏了,等会再看 --------------------编程问答-------------------- 顶呱呱!不过移动开发不都是C++吗 --------------------编程问答-------------------- xixixi --------------------编程问答-------------------- 虽然我没有看明白 
但是能得到这么多人的称赞,
我就觉得 这  不错. --------------------编程问答-------------------- 我是新手~~
来取取经! --------------------编程问答-------------------- 学习来了。。。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 并行计算在net 4.0 有是有了,还没研究过。。学习了 --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- 大牛来说一下 --------------------编程问答-------------------- 很好,学习了。 --------------------编程问答-------------------- 4.0的TPL? --------------------编程问答-------------------- 谁都不会被取缔 --------------------编程问答-------------------- 呵呵,学精一样、触类旁通! --------------------编程问答-------------------- 写得很好支持 --------------------编程问答-------------------- 多核时代面向对象依然重要。 --------------------编程问答-------------------- 来看看~~~不错 --------------------编程问答-------------------- 多核时代看好golang --------------------编程问答-------------------- 学习一下, --------------------编程问答-------------------- 我假设多核等同于并行:
从语言本质层面来讲,函数式语言更适合并行。

C#,JAVA等命令式语言,都是基于“操作影响结果”,依赖于操作的副作用来完成任务的,副作用这东西明显不适合并行计算,这东西也是导致各种锁、同步机制的最本质原因。

F#以及其前辈,和其他函数式语言都基于“操作产生结果”,比非函数式语言更容易避免或者消除副作用在并行情况下带来的等等问题。 --------------------编程问答--------------------
引用 18 楼 bigbaldy 的回复:
.net4.0的parallel还是很好用的


很怀疑parallel的效率,不多说,上代码,求大牛解释一下这个效率!~

    class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[100000000];
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = i;
            }
            Program pro = new Program();
            pro.CommonLoop(a);//普通循环
            GC.Collect();
            pro.ConcurrencyLoop(a);//4.0新特性并行循环
            Console.ReadLine();
        }

        private void CommonLoop(int[] a)
        {
            int[] b = new int[100000000];
            Stopwatch newstopWatch = new Stopwatch();
            newstopWatch.Start();
            for (int i = 0; i < a.Length; i++)
            {
                b[i] = a[i] + 1;

            }
            newstopWatch.Stop();
            Console.WriteLine("普通for循环执行时间:" + newstopWatch.ElapsedTicks);
        }

        private void ConcurrencyLoop(int[] a)
        {
            int[] b = new int[100000000];
            Stopwatch newstopWatch = new Stopwatch();
            newstopWatch.Start();
            Parallel.For(0, a.Length, i =>
            {
                b[i] = a[i] + 1;
            });
            newstopWatch.Stop();
            Console.WriteLine("并行循环执行时间:" + newstopWatch.ElapsedTicks);
        }
    }
--------------------编程问答-------------------- 普通的for循环执行时间比Parallel.For循环执行的时间相差不大,而且我测试几次竟然大部分Parallel.For比普通for循环执行的时间还要长,这是为什么? --------------------编程问答--------------------
引用 53 楼 Java_Script__ 的回复:
普通的for循环执行时间比Parallel.For循环执行的时间相差不大,而且我测试几次竟然大部分Parallel.For比普通for循环执行的时间还要长,这是为什么?

啥机器配置? --------------------编程问答--------------------
引用 54 楼 BEYONDMA 的回复:
引用 53 楼 Java_Script__ 的回复:普通的for循环执行时间比Parallel.For循环执行的时间相差不大,而且我测试几次竟然大部分Parallel.For比普通for循环执行的时间还要长,这是为什么?
啥机器配置?

--------------------编程问答-------------------- 人呢? --------------------编程问答--------------------
引用 52 楼 Java_Script__ 的回复:
引用 18 楼 bigbaldy 的回复:.net4.0的parallel还是很好用的

很怀疑parallel的效率,不多说,上代码,求大牛解释一下这个效率!~
C# code?12345678910111213141516171819202122232425262728293031323334353637383940414243    class Program……


貌似这个b[i] = a[i] + 1;计算过程太简单,也就是说每一个单独的线程干的事太简单就反而会慢,而如果每个线程中本身要干的事比较花时间,例如你改成b[i]=(int)Math.Pow(i,i),速度就是并行计算快了 --------------------编程问答-------------------- F#目前还只是方便了纯计算类应用,没有用户交互的部分,最多就是f#开发计算库供c#调用,很难说能取代什么。 --------------------编程问答-------------------- 虽不懂,但觉厉!顶一个! --------------------编程问答-------------------- 谢谢分享,不错 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 谢楼主分享,不错  --------------------编程问答-------------------- LZ发明一种语言吧,如叫多核编程语言C##,人家老外什么html等也是民间爱好者自己搞的 --------------------编程问答-------------------- 楼主是好人,大大的支持
补充:移动开发 ,  Windows Phone
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,